You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@trafficcontrol.apache.org by GitBox <gi...@apache.org> on 2018/09/07 16:19:44 UTC

[GitHub] DylanVolz closed pull request #2783: Fix Go struct versioning, remove duplicate code, use embedding, reconcile differences

DylanVolz closed pull request #2783: Fix Go struct versioning, remove duplicate code, use embedding, reconcile differences
URL: https://github.com/apache/trafficcontrol/pull/2783
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/lib/go-tc/asns.go b/lib/go-tc/asns.go
index 8bc967a9d..20be4570e 100644
--- a/lib/go-tc/asns.go
+++ b/lib/go-tc/asns.go
@@ -19,22 +19,70 @@ package tc
  * under the License.
  */
 
+// Autonomous System Numbers
+//
+// A List of ASNs Response
+// swagger:response ASNsResponse
+// in: body
 type ASNsResponse struct {
+	// in: body
 	Response []ASN `json:"response"`
 }
 
+// A Single ASN Response for Update and Create to depict what changed
+// swagger:response ASNResponse
+// in: body
+type ASNResponse struct {
+	// in: body
+	Response ASN `json:"response"`
+}
+
 type ASN struct {
-	ASN          int       `json:"asn" db:"asn"`
-	Cachegroup   string    `json:"cachegroup"`
-	CachegroupID int       `json:"cachegroupId" db:"cachegroup_id"`
-	ID           int       `json:"id" db:"id"`
-	LastUpdated  TimeNoMod `json:"lastUpdated" db:"last_updated"`
+	// The ASN to retrieve
+	//
+	// Autonomous System Numbers per APNIC for identifying a service provider
+	// required: true
+	ASN int `json:"asn" db:"asn"`
+
+	// Related cachegroup name
+	//
+	Cachegroup string `json:"cachegroup" db:"cachegroup"`
+
+	// Related cachegroup id
+	//
+	CachegroupID int `json:"cachegroupId" db:"cachegroup_id"`
+
+	// ID of the ASN
+	//
+	// required: true
+	ID int `json:"id" db:"id"`
+
+	// LastUpdated
+	//
+	LastUpdated string `json:"lastUpdated" db:"last_updated"`
 }
 
 type ASNNullable struct {
-	ASN          *int       `json:"asn" db:"asn"`
-	Cachegroup   *string    `json:"cachegroup"`
-	CachegroupID *int       `json:"cachegroupId" db:"cachegroup_id"`
-	ID           *int       `json:"id" db:"id"`
-	LastUpdated  *TimeNoMod `json:"lastUpdated" db:"last_updated"`
+	// The ASN to retrieve
+	//
+	// Autonomous System Numbers per APNIC for identifying a service provider
+	// required: true
+	ASN *int `json:"asn" db:"asn"`
+
+	// Related cachegroup name
+	//
+	Cachegroup *string `json:"cachegroup" db:"cachegroup"`
+
+	// Related cachegroup id
+	//
+	CachegroupID *int `json:"cachegroupId" db:"cachegroup_id"`
+
+	// ID of the ASN
+	//
+	// required: true
+	ID *int `json:"id" db:"id"`
+
+	// LastUpdated
+	//
+	LastUpdated *TimeNoMod `json:"lastUpdated" db:"last_updated"`
 }
diff --git a/lib/go-tc/cachegroups.go b/lib/go-tc/cachegroups.go
new file mode 100644
index 000000000..522ee7e4c
--- /dev/null
+++ b/lib/go-tc/cachegroups.go
@@ -0,0 +1,84 @@
+package tc
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import (
+	"github.com/apache/trafficcontrol/lib/go-util"
+)
+
+// CacheGroupResponse ...
+type CacheGroupsResponse struct {
+	Response []CacheGroup `json:"response"`
+}
+
+type CacheGroupsNullableResponse struct {
+	Response []CacheGroupNullable `json:"response"`
+}
+
+// CacheGroupDetailResponse is the JSON object returned for a single CacheGroup
+type CacheGroupDetailResponse struct {
+	Response CacheGroupNullable `json:"response"`
+	Alerts
+}
+
+// CacheGroup contains information about a given Cachegroup in Traffic Ops.
+type CacheGroup struct {
+	ID                          int                  `json:"id" db:"id"`
+	Name                        string               `json:"name" db:"name"`
+	ShortName                   string               `json:"shortName" db:"short_name"`
+	Latitude                    float64              `json:"latitude" db:"latitude"`
+	Longitude                   float64              `json:"longitude" db:"longitude"`
+	ParentName                  string               `json:"parentCachegroupName" db:"parent_cachegroup_name"`
+	ParentCachegroupID          int                  `json:"parentCachegroupId" db:"parent_cachegroup_id"`
+	SecondaryParentName         string               `json:"secondaryParentCachegroupName" db:"secondary_parent_cachegroup_name"`
+	SecondaryParentCachegroupID int                  `json:"secondaryParentCachegroupId" db:"secondary_parent_cachegroup_id"`
+	FallbackToClosest           bool                 `json:"fallbackToClosest" db:"fallback_to_closest"`
+	LocalizationMethods         []LocalizationMethod `json:"localizationMethods" db:"localization_methods"`
+	Type                        string               `json:"typeName" db:"type_name"` // aliased to type_name to disambiguate struct scans due to join on 'type' table
+	TypeID                      int                  `json:"typeId" db:"type_id"`     // aliased to type_id to disambiguate struct scans due join on 'type' table
+	LastUpdated                 TimeNoMod            `json:"lastUpdated" db:"last_updated"`
+}
+
+type CacheGroupNullable struct {
+	ID                          *int                  `json:"id" db:"id"`
+	Name                        *string               `json:"name" db:"name"`
+	ShortName                   *string               `json:"shortName" db:"short_name"`
+	Latitude                    *float64              `json:"latitude" db:"latitude"`
+	Longitude                   *float64              `json:"longitude"db:"longitude"`
+	ParentName                  *string               `json:"parentCachegroupName" db:"parent_cachegroup_name"`
+	ParentCachegroupID          *int                  `json:"parentCachegroupId" db:"parent_cachegroup_id"`
+	SecondaryParentName         *string               `json:"secondaryParentCachegroupName" db:"secondary_parent_cachegroup_name"`
+	SecondaryParentCachegroupID *int                  `json:"secondaryParentCachegroupId" db:"secondary_parent_cachegroup_id"`
+	FallbackToClosest           *bool                 `json:"fallbackToClosest" db:"fallback_to_closest"`
+	LocalizationMethods         *[]LocalizationMethod `json:"localizationMethods" db:"localization_methods"`
+	Type                        *string               `json:"typeName" db:"type_name"` // aliased to type_name to disambiguate struct scans due to join on 'type' table
+	TypeID                      *int                  `json:"typeId" db:"type_id"`     // aliased to type_id to disambiguate struct scans due join on 'type' table
+	LastUpdated                 *TimeNoMod            `json:"lastUpdated" db:"last_updated"`
+}
+
+type CachegroupTrimmedName struct {
+	Name string `json:"name"`
+}
+
+type CachegroupQueueUpdatesRequest struct {
+	Action string           `json:"action"`
+	CDN    *CDNName         `json:"cdn"`
+	CDNID  *util.JSONIntStr `json:"cdnId"`
+}
diff --git a/lib/go-tc/v13/cdns.go b/lib/go-tc/cdns.go
similarity index 93%
rename from lib/go-tc/v13/cdns.go
rename to lib/go-tc/cdns.go
index 314e2d69e..869008130 100644
--- a/lib/go-tc/v13/cdns.go
+++ b/lib/go-tc/cdns.go
@@ -1,6 +1,4 @@
-package v13
-
-import tc "github.com/apache/trafficcontrol/lib/go-tc"
+package tc
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -59,7 +57,7 @@ type CDN struct {
 
 	// LastUpdated
 	//
-	LastUpdated tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
+	LastUpdated TimeNoMod `json:"lastUpdated" db:"last_updated"`
 
 	// Name of the CDN
 	//
@@ -89,7 +87,7 @@ type CDNNullable struct {
 
 	// LastUpdated
 	//
-	LastUpdated *tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
+	LastUpdated *TimeNoMod `json:"lastUpdated" db:"last_updated"`
 
 	// Name of the CDN
 	//
@@ -115,7 +113,6 @@ type CDNSSLKeysCertificate struct {
 	Key string `json:"key"`
 }
 
-
 type CDNConfig struct {
 	Name *string `json:"name"`
 	ID   *int    `json:"id"`
diff --git a/lib/go-tc/v13/coordinates.go b/lib/go-tc/coordinates.go
similarity index 91%
rename from lib/go-tc/v13/coordinates.go
rename to lib/go-tc/coordinates.go
index 3ff4b0495..3cc74dc22 100644
--- a/lib/go-tc/v13/coordinates.go
+++ b/lib/go-tc/coordinates.go
@@ -1,6 +1,4 @@
-package v13
-
-import tc "github.com/apache/trafficcontrol/lib/go-tc"
+package tc
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -64,7 +62,7 @@ type Coordinate struct {
 
 	// LastUpdated
 	//
-	LastUpdated tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
+	LastUpdated TimeNoMod `json:"lastUpdated" db:"last_updated"`
 }
 
 // CoordinateNullable ...
@@ -94,5 +92,5 @@ type CoordinateNullable struct {
 
 	// LastUpdated
 	//
-	LastUpdated *tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
+	LastUpdated *TimeNoMod `json:"lastUpdated" db:"last_updated"`
 }
diff --git a/lib/go-tc/deliveryservice_regexes.go b/lib/go-tc/deliveryservice_regexes.go
index 117d61f4c..6bb7da052 100644
--- a/lib/go-tc/deliveryservice_regexes.go
+++ b/lib/go-tc/deliveryservice_regexes.go
@@ -32,14 +32,6 @@ type DeliveryServiceRegex struct {
 	Pattern   string `json:"pattern"`
 }
 
-type DeliveryServiceRegexV12 struct {
-	DeliveryServiceRegex
-}
-
-type DeliveryServiceRegexV13 struct {
-	DeliveryServiceRegexV12
-}
-
 type DeliveryServiceIDRegexResponse struct {
 	Response []DeliveryServiceIDRegex `json:"response"`
 }
@@ -52,14 +44,6 @@ type DeliveryServiceIDRegex struct {
 	Pattern   string `json:"pattern"`
 }
 
-type DeliveryServiceIDRegexV12 struct {
-	DeliveryServiceIDRegex
-}
-
-type DeliveryServiceIDRegexV13 struct {
-	DeliveryServiceIDRegexV12
-}
-
 type DeliveryServiceRegexPost struct {
 	Type      int    `json:"type"`
 	SetNumber int    `json:"setNumber"`
diff --git a/lib/go-tc/deliveryservice_requests.go b/lib/go-tc/deliveryservice_requests.go
index 2ecf5baf8..b4147aa76 100644
--- a/lib/go-tc/deliveryservice_requests.go
+++ b/lib/go-tc/deliveryservice_requests.go
@@ -32,37 +32,37 @@ type IDNoMod int
 // DeliveryServiceRequest is used as part of the workflow to create,
 // modify, or delete a delivery service.
 type DeliveryServiceRequest struct {
-	AssigneeID      int                `json:"assigneeId,omitempty"`
-	Assignee        string             `json:"assignee,omitempty"`
-	AuthorID        IDNoMod            `json:"authorId"`
-	Author          string             `json:"author"`
-	ChangeType      string             `json:"changeType"`
-	CreatedAt       *TimeNoMod         `json:"createdAt"`
-	ID              int                `json:"id"`
-	LastEditedBy    string             `json:"lastEditedBy,omitempty"`
-	LastEditedByID  IDNoMod            `json:"lastEditedById,omitempty"`
-	LastUpdated     *TimeNoMod         `json:"lastUpdated"`
-	DeliveryService DeliveryServiceV13 `json:"deliveryService"` // TODO version DeliveryServiceRequest
-	Status          RequestStatus      `json:"status"`
-	XMLID           string             `json:"-" db:"xml_id"`
+	AssigneeID      int             `json:"assigneeId,omitempty"`
+	Assignee        string          `json:"assignee,omitempty"`
+	AuthorID        IDNoMod         `json:"authorId"`
+	Author          string          `json:"author"`
+	ChangeType      string          `json:"changeType"`
+	CreatedAt       *TimeNoMod      `json:"createdAt"`
+	ID              int             `json:"id"`
+	LastEditedBy    string          `json:"lastEditedBy,omitempty"`
+	LastEditedByID  IDNoMod         `json:"lastEditedById,omitempty"`
+	LastUpdated     *TimeNoMod      `json:"lastUpdated"`
+	DeliveryService DeliveryService `json:"deliveryService"` // TODO version DeliveryServiceRequest
+	Status          RequestStatus   `json:"status"`
+	XMLID           string          `json:"-" db:"xml_id"`
 }
 
 // DeliveryServiceRequestNullable is used as part of the workflow to create,
 // modify, or delete a delivery service.
 type DeliveryServiceRequestNullable struct {
-	AssigneeID      *int                        `json:"assigneeId,omitempty" db:"assignee_id"`
-	Assignee        *string                     `json:"assignee,omitempty"`
-	AuthorID        *IDNoMod                    `json:"authorId" db:"author_id"`
-	Author          *string                     `json:"author"`
-	ChangeType      *string                     `json:"changeType" db:"change_type"`
-	CreatedAt       *TimeNoMod                  `json:"createdAt" db:"created_at"`
-	ID              *int                        `json:"id" db:"id"`
-	LastEditedBy    *string                     `json:"lastEditedBy"`
-	LastEditedByID  *IDNoMod                    `json:"lastEditedById" db:"last_edited_by_id"`
-	LastUpdated     *TimeNoMod                  `json:"lastUpdated" db:"last_updated"`
-	DeliveryService *DeliveryServiceNullableV13 `json:"deliveryService" db:"deliveryservice"` // TODO version DeliveryServiceRequest
-	Status          *RequestStatus              `json:"status" db:"status"`
-	XMLID           *string                     `json:"-" db:"xml_id"`
+	AssigneeID      *int                     `json:"assigneeId,omitempty" db:"assignee_id"`
+	Assignee        *string                  `json:"assignee,omitempty"`
+	AuthorID        *IDNoMod                 `json:"authorId" db:"author_id"`
+	Author          *string                  `json:"author"`
+	ChangeType      *string                  `json:"changeType" db:"change_type"`
+	CreatedAt       *TimeNoMod               `json:"createdAt" db:"created_at"`
+	ID              *int                     `json:"id" db:"id"`
+	LastEditedBy    *string                  `json:"lastEditedBy"`
+	LastEditedByID  *IDNoMod                 `json:"lastEditedById" db:"last_edited_by_id"`
+	LastUpdated     *TimeNoMod               `json:"lastUpdated" db:"last_updated"`
+	DeliveryService *DeliveryServiceNullable `json:"deliveryService" db:"deliveryservice"` // TODO version DeliveryServiceRequest
+	Status          *RequestStatus           `json:"status" db:"status"`
+	XMLID           *string                  `json:"-" db:"xml_id"`
 }
 
 // UnmarshalJSON implements the json.Unmarshaller interface to suppress unmarshalling for IDNoMod
diff --git a/lib/go-tc/deliveryservices.go b/lib/go-tc/deliveryservices.go
index 3096e526b..b92d54956 100644
--- a/lib/go-tc/deliveryservices.go
+++ b/lib/go-tc/deliveryservices.go
@@ -40,7 +40,7 @@ type GetDeliveryServiceResponse struct {
 
 // DeliveryServicesResponse ...
 type DeliveryServicesResponse struct {
-	Response []DeliveryServiceV13 `json:"response"`
+	Response []DeliveryService `json:"response"`
 }
 
 // CreateDeliveryServiceResponse ...
@@ -66,9 +66,23 @@ type DeleteDeliveryServiceResponse struct {
 	Alerts []DeliveryServiceAlert `json:"alerts"`
 }
 
+type DeliveryService struct {
+	DeliveryServiceV12
+	DeepCachingType   DeepCachingType `json:"deepCachingType"`
+	FQPacingRate      int             `json:"fqPacingRate,omitempty"`
+	SigningAlgorithm  string          `json:"signingAlgorithm" db:"signing_algorithm"`
+	TenantName        string          `json:"tenantName,omitempty"`
+	TRRequestHeaders  string          `json:"trRequestHeaders,omitempty"`
+	TRResponseHeaders string          `json:"trResponseHeaders,omitempty"`
+}
+
+type DeliveryServiceV12 struct {
+	DeliveryServiceV11
+}
+
 // DeliveryService ...
 // TODO move contents to DeliveryServiceV12, fix references, and remove
-type DeliveryService struct {
+type DeliveryServiceV11 struct {
 	Active                   bool                   `json:"active"`
 	AnonymousBlockingEnabled bool                   `json:"anonymousBlockingEnabled"`
 	CacheURL                 string                 `json:"cacheurl"`
@@ -125,23 +139,23 @@ type DeliveryService struct {
 	XMLID                    string                 `json:"xmlId"`
 }
 
-type DeliveryServiceV12 struct {
-	DeliveryService
+type DeliveryServiceNullable struct {
+	DeliveryServiceNullableV12
+	DeepCachingType   *DeepCachingType `json:"deepCachingType" db:"deep_caching_type"`
+	FQPacingRate      *int             `json:"fqPacingRate,omitempty"`
+	SigningAlgorithm  *string          `json:"signingAlgorithm" db:"signing_algorithm"`
+	Tenant            *string          `json:"tenant,omitempty"`
+	TRResponseHeaders *string          `json:"trResponseHeaders,omitempty"`
+	TRRequestHeaders  *string          `json:"trRequestHeaders,omitempty"`
 }
 
-type DeliveryServiceV13 struct {
-	DeliveryServiceV12
-	DeepCachingType   DeepCachingType `json:"deepCachingType"`
-	FQPacingRate      int             `json:"fqPacingRate,omitempty"`
-	SigningAlgorithm  string          `json:"signingAlgorithm" db:"signing_algorithm"`
-	TenantName        string          `json:"tenantName,omitempty"`
-	TRRequestHeaders  string          `json:"trRequestHeaders,omitempty"`
-	TRResponseHeaders string          `json:"trResponseHeaders,omitempty"`
+type DeliveryServiceNullableV12 struct {
+	DeliveryServiceNullableV11
 }
 
 // DeliveryServiceNullable - a version of the deliveryservice that allows for all fields to be null
 // TODO move contents to DeliveryServiceNullableV12, fix references, and remove
-type DeliveryServiceNullable struct {
+type DeliveryServiceNullableV11 struct {
 	// NOTE: the db: struct tags are used for testing to map to their equivalent database column (if there is one)
 	//
 	Active                   *bool                   `json:"active" db:"active"`
@@ -202,23 +216,9 @@ type DeliveryServiceNullable struct {
 	ExampleURLs              []string                `json:"exampleURLs"`
 }
 
-type DeliveryServiceNullableV12 struct {
-	DeliveryServiceNullable
-}
-
-type DeliveryServiceNullableV13 struct {
-	DeliveryServiceNullableV12
-	DeepCachingType   *DeepCachingType `json:"deepCachingType" db:"deep_caching_type"`
-	FQPacingRate      *int             `json:"fqPacingRate,omitempty"`
-	SigningAlgorithm  *string          `json:"signingAlgorithm" db:"signing_algorithm"`
-	Tenant            *string          `json:"tenant,omitempty"`
-	TRResponseHeaders *string          `json:"trResponseHeaders,omitempty"`
-	TRRequestHeaders  *string          `json:"trRequestHeaders,omitempty"`
-}
-
-// NewDeliveryServiceNullableV13FromV12 creates a new V13 DS from a V12 DS, filling new fields with appropriate defaults.
-func NewDeliveryServiceNullableV13FromV12(ds DeliveryServiceNullableV12) DeliveryServiceNullableV13 {
-	newDS := DeliveryServiceNullableV13{DeliveryServiceNullableV12: ds}
+// NewDeliveryServiceNullableFromV12 creates a new V13 DS from a V12 DS, filling new fields with appropriate defaults.
+func NewDeliveryServiceNullableFromV12(ds DeliveryServiceNullableV12) DeliveryServiceNullable {
+	newDS := DeliveryServiceNullable{DeliveryServiceNullableV12: ds}
 	newDS.Sanitize()
 	return newDS
 }
@@ -383,7 +383,7 @@ func (ds *DeliveryServiceNullableV12) Validate(tx *sql.Tx) error {
 	return nil
 }
 
-func (ds *DeliveryServiceNullableV13) Sanitize() {
+func (ds *DeliveryServiceNullable) Sanitize() {
 	ds.DeliveryServiceNullableV12.Sanitize()
 	signedAlgorithm := "url_sig"
 	if ds.Signed && (ds.SigningAlgorithm == nil || *ds.SigningAlgorithm == "") {
@@ -399,7 +399,7 @@ func (ds *DeliveryServiceNullableV13) Sanitize() {
 	*ds.DeepCachingType = DeepCachingTypeFromString(string(*ds.DeepCachingType))
 }
 
-func (ds *DeliveryServiceNullableV13) Validate(tx *sql.Tx) error {
+func (ds *DeliveryServiceNullable) Validate(tx *sql.Tx) error {
 	ds.Sanitize()
 	neverOrAlways := validation.NewStringRule(tovalidate.IsOneOfStringICase("NEVER", "ALWAYS"),
 		"must be one of 'NEVER' or 'ALWAYS'")
@@ -417,14 +417,14 @@ func (ds *DeliveryServiceNullableV13) Validate(tx *sql.Tx) error {
 
 // Value implements the driver.Valuer interface
 // marshals struct to json to pass back as a json.RawMessage
-func (d *DeliveryServiceNullableV13) Value() (driver.Value, error) {
+func (d *DeliveryServiceNullable) Value() (driver.Value, error) {
 	b, err := json.Marshal(d)
 	return b, err
 }
 
 // Scan implements the sql.Scanner interface
 // expects json.RawMessage and unmarshals to a deliveryservice struct
-func (d *DeliveryServiceNullableV13) Scan(src interface{}) error {
+func (d *DeliveryServiceNullable) Scan(src interface{}) error {
 	b, ok := src.([]byte)
 	if !ok {
 		return fmt.Errorf("expected deliveryservice in byte array form; got %T", src)
@@ -549,16 +549,8 @@ type UserDeliveryServicePostResponse struct {
 	Response DeliveryServiceUserPost `json:"response"`
 }
 
-type UserDeliveryServicesResponseV13 struct {
-	Response []DeliveryServiceV13 `json:"response"`
-}
-
-type UserDeliveryServicesResponseV12 struct {
-	Response []DeliveryServiceV13 `json:"response"`
-}
-
-type UserDeliveryServicesResponse struct {
-	Response []DeliveryServiceNullableV13 `json:"response"`
+type UserDeliveryServicesNullableResponse struct {
+	Response []DeliveryServiceNullable `json:"response"`
 }
 
 type DSServerIDs struct {
diff --git a/lib/go-tc/divisions.go b/lib/go-tc/divisions.go
index e3150e105..0f4af02be 100644
--- a/lib/go-tc/divisions.go
+++ b/lib/go-tc/divisions.go
@@ -19,14 +19,36 @@ package tc
  * under the License.
  */
 
+// A List of Divisions Response
+// swagger:response DivisionsResponse
 type DivisionsResponse struct {
+	// in: body
 	Response []Division `json:"response"`
 }
 
+// A Single Division Response for Update and Create to depict what changed
+// swagger:response DivisionResponse
+// in: body
+type DivisionResponse struct {
+	// in: body
+	Response Division `json:"response"`
+}
+
+// Division ...
 type Division struct {
-	ID          int       `json:"id" db:"id"`
+
+	// Division ID
+	//
+	ID int `json:"id" db:"id"`
+
+	// LastUpdated
+	//
 	LastUpdated TimeNoMod `json:"lastUpdated" db:"last_updated"`
-	Name        string    `json:"name" db:"name"`
+
+	// Division Name
+	//
+	// required: true
+	Name string `json:"name" db:"name"`
 }
 
 type DivisionNullable struct {
diff --git a/lib/go-tc/v13/domains.go b/lib/go-tc/domains.go
similarity index 99%
rename from lib/go-tc/v13/domains.go
rename to lib/go-tc/domains.go
index 7908c4ff7..29c4292ad 100644
--- a/lib/go-tc/v13/domains.go
+++ b/lib/go-tc/domains.go
@@ -1,4 +1,4 @@
-package v13
+package tc
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -24,7 +24,6 @@ type DomainsResponse struct {
 }
 
 type Domain struct {
-
 	ProfileID int `json:"profileId" db:"profile_id"`
 
 	ParameterID int `json:"parameterId" db:"parameter_id"`
diff --git a/lib/go-tc/enum_test.go b/lib/go-tc/enum_test.go
index a06e0b115..95fb64ac0 100644
--- a/lib/go-tc/enum_test.go
+++ b/lib/go-tc/enum_test.go
@@ -62,7 +62,7 @@ func TestDeepCachingType(t *testing.T) {
 	}
 
 	// make sure we get the right default when marshalled within a new delivery service
-	var ds DeliveryServiceV13
+	var ds DeliveryService
 	_, err := json.MarshalIndent(ds, ``, `  `)
 	if err != nil {
 		t.Errorf(err.Error())
diff --git a/lib/go-tc/v13/federations.go b/lib/go-tc/federation.go
similarity index 72%
rename from lib/go-tc/v13/federations.go
rename to lib/go-tc/federation.go
index 17fe97dae..e7b1d21e0 100644
--- a/lib/go-tc/v13/federations.go
+++ b/lib/go-tc/federation.go
@@ -1,6 +1,4 @@
-package v13
-
-import "github.com/apache/trafficcontrol/lib/go-tc"
+package tc
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -27,24 +25,24 @@ type CDNFederationResponse struct {
 
 type CreateCDNFederationResponse struct {
 	Response CDNFederation `json:"response"`
-	tc.Alerts
+	Alerts
 }
 
 type UpdateCDNFederationResponse struct {
 	Response CDNFederation `json:"response"`
-	tc.Alerts
+	Alerts
 }
 
 type DeleteCDNFederationResponse struct {
-	tc.Alerts
+	Alerts
 }
 
 type CDNFederation struct {
-	ID          *int          `json:"id" db:"id"`
-	CName       *string       `json:"cname" db:"cname"`
-	TTL         *int          `json:"ttl" db:"ttl"`
-	Description *string       `json:"description" db:"description"`
-	LastUpdated *tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
+	ID          *int       `json:"id" db:"id"`
+	CName       *string    `json:"cname" db:"cname"`
+	TTL         *int       `json:"ttl" db:"ttl"`
+	Description *string    `json:"description" db:"description"`
+	LastUpdated *TimeNoMod `json:"lastUpdated" db:"last_updated"`
 
 	// omitempty only works with primitive types and pointers
 	*DeliveryServiceIDs `json:"deliveryService,omitempty"`
@@ -54,3 +52,13 @@ type DeliveryServiceIDs struct {
 	DsId  *int    `json:"id,omitempty" db:"ds_id"`
 	XmlId *string `json:"xmlId,omitempty" db:"xml_id"`
 }
+
+type FederationNullable struct {
+	Mappings        []FederationMapping `json:"mappings"`
+	DeliveryService *string             `json:"deliveryService"`
+}
+
+type FederationMapping struct {
+	CName string `json:"cname"`
+	TTL   int    `json:"ttl"`
+}
diff --git a/lib/go-tc/origins.go b/lib/go-tc/origins.go
new file mode 100644
index 000000000..1fa2ebd52
--- /dev/null
+++ b/lib/go-tc/origins.go
@@ -0,0 +1,52 @@
+package tc
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+type OriginsResponse struct {
+	Response []Origin `json:"response"`
+}
+
+// OriginDetailResponse is the JSON object returned for a single origin
+type OriginDetailResponse struct {
+	Response Origin `json:"response"`
+	Alerts
+}
+
+type Origin struct {
+	Cachegroup        *string    `json:"cachegroup" db:"cachegroup"`
+	CachegroupID      *int       `json:"cachegroupId" db:"cachegroup_id"`
+	Coordinate        *string    `json:"coordinate" db:"coordinate"`
+	CoordinateID      *int       `json:"coordinateId" db:"coordinate_id"`
+	DeliveryService   *string    `json:"deliveryService" db:"deliveryservice"`
+	DeliveryServiceID *int       `json:"deliveryServiceId" db:"deliveryservice_id"`
+	FQDN              *string    `json:"fqdn" db:"fqdn"`
+	ID                *int       `json:"id" db:"id"`
+	IP6Address        *string    `json:"ip6Address" db:"ip6_address"`
+	IPAddress         *string    `json:"ipAddress" db:"ip_address"`
+	IsPrimary         *bool      `json:"isPrimary" db:"is_primary"`
+	LastUpdated       *TimeNoMod `json:"lastUpdated" db:"last_updated"`
+	Name              *string    `json:"name" db:"name"`
+	Port              *int       `json:"port" db:"port"`
+	Profile           *string    `json:"profile" db:"profile"`
+	ProfileID         *int       `json:"profileId" db:"profile_id"`
+	Protocol          *string    `json:"protocol" db:"protocol"`
+	Tenant            *string    `json:"tenant" db:"tenant"`
+	TenantID          *int       `json:"tenantId" db:"tenant_id"`
+}
diff --git a/lib/go-tc/physlocations.go b/lib/go-tc/physlocations.go
index c0c32ee3f..346bfb079 100644
--- a/lib/go-tc/physlocations.go
+++ b/lib/go-tc/physlocations.go
@@ -23,42 +23,172 @@ type PhysLocationsResponse struct {
 	Response []PhysLocation `json:"response"`
 }
 
+type PhysLocationResponse struct {
+	Response PhysLocationNullable `json:"response"`
+}
+
 type PhysLocation struct {
-	Address     string    `json:"address" db:"address"`
-	City        string    `json:"city" db:"city"`
-	Comments    string    `json:"comments" db:"comments"`
-	Email       string    `json:"email" db:"email"`
-	ID          int       `json:"id" db:"id"`
+
+	//
+	// The Street Address of the physical location
+	//
+	// required: true
+	Address string `json:"address" db:"address"`
+
+	//
+	// The Address of the physical location
+	//
+	// required: true
+	City string `json:"city" db:"city"`
+
+	//
+	// comments are additional details about the physical location
+	//
+	Comments string `json:"comments" db:"comments"`
+
+	//
+	// The email address for the Point of Contact at the physical location
+	//
+	Email string `json:"email" db:"email"`
+
+	//
+	// The name of the physical location
+	//
+	// required: true
+	ID int `json:"id" db:"id"`
+
+	// Timestamp of the last time this row was updated
+	//
 	LastUpdated TimeNoMod `json:"lastUpdated" db:"last_updated"`
-	Name        string    `json:"name" db:"name"`
-	Phone       string    `json:"phone" db:"phone"`
-	POC         string    `json:"poc" db:"poc"`
-	RegionID    int       `json:"regionId" db:"region"`
-	RegionName  string    `json:"region" db:"region_name"`
-	ShortName   string    `json:"shortName" db:"short_name"`
-	State       string    `json:"state" db:"state"`
-	Zip         string    `json:"zip" db:"zip"`
+
+	//
+	// The name of the physical location
+	//
+	// required: true
+	Name string `json:"name" db:"name"`
+
+	//
+	// The phone number of the physical location
+	//
+	// required: true
+	Phone string `json:"phone" db:"phone"`
+
+	//
+	// The Point Of Contact at the physical location
+	//
+	// required: true
+	POC string `json:"poc" db:"poc"`
+
+	//
+	// The RegionID associated to this physical location
+	//
+	// required: true
+	RegionID int `json:"regionId" db:"region"`
+
+	//
+	// The Region Name for the region associated to this physical location
+	//
+	RegionName string `json:"region" db:"region_name"`
+
+	//
+	// The shortName for the physical location (like an alias)
+	//
+	// required: true
+	ShortName string `json:"shortName" db:"short_name"`
+
+	//
+	// The State for the physical location
+	//
+	// required: true
+	State string `json:"state" db:"state"`
+
+	//
+	// The Zipcode for the physical location
+	//
+	// required: true
+	Zip string `json:"zip" db:"zip"`
 }
 
 // PhysLocationNullable - a struct version that allows for all fields to be null
 type PhysLocationNullable struct {
 	//
-	// NOTE: the db: struct tags are used for testing to map to their equivalent database column (if there is one)
+	// The Street Address of the physical location
+	//
+	// required: true
+	Address *string `json:"address" db:"address"`
+
+	//
+	// The Address of the physical location
+	//
+	// required: true
+	City *string `json:"city" db:"city"`
+
+	//
+	// comments are additional details about the physical location
+	//
+	Comments *string `json:"comments" db:"comments"`
+
+	//
+	// The email address for the Point of Contact at the physical location
+	//
+	Email *string `json:"email" db:"email"`
+
+	//
+	// The name of the physical location
+	//
+	// required: true
+	ID *int `json:"id" db:"id"`
+
+	// Timestamp of the last time this row was updated
 	//
-	Address     *string    `json:"address" db:"address"`
-	City        *string    `json:"city" db:"city"`
-	Comments    *string    `json:"comments" db:"comments"`
-	Email       *string    `json:"email" db:"email"`
-	ID          *int       `json:"id" db:"id"`
 	LastUpdated *TimeNoMod `json:"lastUpdated" db:"last_updated"`
-	Name        *string    `json:"name" db:"name"`
-	Phone       *string    `json:"phone" db:"phone"`
-	POC         *string    `json:"poc" db:"poc"`
-	RegionID    *int       `json:"regionId" db:"region"`
-	RegionName  *string    `json:"region" db:"region_name"`
-	ShortName   *string    `json:"shortName" db:"short_name"`
-	State       *string    `json:"state" db:"state"`
-	Zip         *string    `json:"zip" db:"zip"`
+
+	//
+	// The name of the physical location
+	//
+	// required: true
+	Name *string `json:"name" db:"name"`
+
+	//
+	// The phone number of the physical location
+	//
+	// required: true
+	Phone *string `json:"phone" db:"phone"`
+
+	//
+	// The Point Of Contact at the physical location
+	//
+	// required: true
+	POC *string `json:"poc" db:"poc"`
+
+	//
+	// The RegionID associated to this physical location
+	//
+	// required: true
+	RegionID *int `json:"regionId" db:"region"`
+
+	//
+	// The Region Name for the region associated to this physical location
+	//
+	RegionName *string `json:"region" db:"region_name"`
+
+	//
+	// The shortName for the physical location (like an alias)
+	//
+	// required: true
+	ShortName *string `json:"shortName" db:"short_name"`
+
+	//
+	// The State for the physical location
+	//
+	// required: true
+	State *string `json:"state" db:"state"`
+
+	//
+	// The Zipcode for the physical location
+	//
+	// required: true
+	Zip *string `json:"zip" db:"zip"`
 }
 
 type PhysLocationTrimmed struct {
diff --git a/lib/go-tc/v13/profile_parameters.go b/lib/go-tc/profile_parameters.go
similarity index 68%
rename from lib/go-tc/v13/profile_parameters.go
rename to lib/go-tc/profile_parameters.go
index 285778543..848a403bd 100644
--- a/lib/go-tc/v13/profile_parameters.go
+++ b/lib/go-tc/profile_parameters.go
@@ -1,6 +1,4 @@
-package v13
-
-import tc "github.com/apache/trafficcontrol/lib/go-tc"
+package tc
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -36,18 +34,18 @@ type ProfileParameterResponse struct {
 
 // ProfileParameter ...
 type ProfileParameter struct {
-	LastUpdated tc.TimeNoMod `json:"lastUpdated"`
-	Profile     string       `json:"profile"`
-	ProfileID   int          `json:"profileId"`
-	Parameter   string       `json:"parameter"`
-	ParameterID int          `json:"parameterId"`
+	LastUpdated TimeNoMod `json:"lastUpdated"`
+	Profile     string    `json:"profile"`
+	ProfileID   int       `json:"profileId"`
+	Parameter   string    `json:"parameter"`
+	ParameterID int       `json:"parameterId"`
 }
 
 // ProfileParameterNullable ...
 type ProfileParameterNullable struct {
-	LastUpdated *tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
-	Profile     *string       `json:"profile" db:"profile"`
-	ProfileID   *int          `json:"profileId" db:"profile_id"`
-	Parameter   *string       `json:"parameter" db:"parameter"`
-	ParameterID *int          `json:"parameterId" db:"parameter_id"`
+	LastUpdated *TimeNoMod `json:"lastUpdated" db:"last_updated"`
+	Profile     *string    `json:"profile" db:"profile"`
+	ProfileID   *int       `json:"profileId" db:"profile_id"`
+	Parameter   *string    `json:"parameter" db:"parameter"`
+	ParameterID *int       `json:"parameterId" db:"parameter_id"`
 }
diff --git a/lib/go-tc/profiles.go b/lib/go-tc/profiles.go
index cc0175ca0..9c6a091fe 100644
--- a/lib/go-tc/profiles.go
+++ b/lib/go-tc/profiles.go
@@ -24,30 +24,66 @@ type ProfilesResponse struct {
 	Response []Profile `json:"response"`
 }
 
+// A Single Profile Response for Update and Create to depict what changed
+// swagger:response ProfileResponse
+// in: body
+type ProfileResponse struct {
+	// in: body
+	Response Profile `json:"response"`
+}
+
 // Profile ...
 type Profile struct {
-	ID              int       `json:"id" db:"id"`
-	LastUpdated     TimeNoMod `json:"lastUpdated"`
-	Name            string    `json:"name"`
-	Description     string    `json:"description"`
-	CDNName         string    `json:"cdnName"`
-	CDNID           int       `json:"cdn"`
-	RoutingDisabled bool      `json:"routingDisabled"`
-	Type            string    `json:"type"`
+	ID              int                 `json:"id" db:"id"`
+	LastUpdated     TimeNoMod           `json:"lastUpdated"`
+	Name            string              `json:"name"`
+	Parameter       string              `json:"param"`
+	Description     string              `json:"description"`
+	CDNName         string              `json:"cdnName"`
+	CDNID           int                 `json:"cdn"`
+	RoutingDisabled bool                `json:"routingDisabled"`
+	Type            string              `json:"type"`
+	Parameters      []ParameterNullable `json:"params,omitempty"`
 }
 
-// ProfileNullable ...
 type ProfileNullable struct {
-	ID              *int       `json:"id" db:"id"`
-	LastUpdated     *TimeNoMod `json:"lastUpdated" db:"last_updated"`
-	Name            *string    `json:"name" db:"name"`
-	Description     *string    `json:"description" db:"description"`
-	CDNName         *string    `json:"cdnName" db:"cdn_name"`
-	CDNID           *int       `json:"cdn" db:"cdn"`
-	RoutingDisabled *bool      `json:"routingDisabled" db:"routing_disabled"`
-	Type            *string    `json:"type" db:"type"`
-}
 
+	// Unique identifier for the Profile
+	//
+	ID *int `json:"id" db:"id"`
+
+	// LastUpdated
+	//
+	LastUpdated *TimeNoMod `json:"lastUpdated" db:"last_updated"`
+
+	// The Profile name
+	//
+	Name *string `json:"name" db:"name"`
+
+	// The Profile Description
+	//
+	Description *string `json:"description" db:"description"`
+
+	// The CDN name associated with the Profile
+	//
+	CDNName *string `json:"cdnName" db:"cdn_name"`
+
+	// The CDN id associated with the Profile
+	//
+	CDNID *int `json:"cdn" db:"cdn"`
+
+	// Enables
+	//
+	RoutingDisabled *bool `json:"routingDisabled" db:"routing_disabled"`
+
+	// The Type name associated with the Profile
+	//
+	Type *string `json:"type" db:"type"`
+
+	// Parameters associated to the profile
+	//
+	Parameters []ParameterNullable `json:"params,omitempty"`
+}
 type ProfileTrimmed struct {
 	Name string `json:"name"`
 }
diff --git a/lib/go-tc/v13/roles.go b/lib/go-tc/roles.go
similarity index 99%
rename from lib/go-tc/v13/roles.go
rename to lib/go-tc/roles.go
index eb38ba075..2cce62046 100644
--- a/lib/go-tc/v13/roles.go
+++ b/lib/go-tc/roles.go
@@ -1,5 +1,4 @@
-
-package v13
+package tc
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -62,4 +61,4 @@ type Role struct {
 	//
 	// required: true
 	Capabilities *[]string `json:"capabilities" db:"capabilities"`
-}
\ No newline at end of file
+}
diff --git a/lib/go-tc/servers.go b/lib/go-tc/servers.go
index c70b17767..6d6df541d 100644
--- a/lib/go-tc/servers.go
+++ b/lib/go-tc/servers.go
@@ -104,7 +104,7 @@ type ServerNullable struct {
 	IPAddress        *string              `json:"ipAddress" db:"ip_address"`
 	IPGateway        *string              `json:"ipGateway" db:"ip_gateway"`
 	IPNetmask        *string              `json:"ipNetmask" db:"ip_netmask"`
-	LastUpdated      TimeNoMod            `json:"lastUpdated" db:"last_updated"`
+	LastUpdated      *TimeNoMod           `json:"lastUpdated" db:"last_updated"`
 	MgmtIPAddress    *string              `json:"mgmtIpAddress" db:"mgmt_ip_address"`
 	MgmtIPGateway    *string              `json:"mgmtIpGateway" db:"mgmt_ip_gateway"`
 	MgmtIPNetmask    *string              `json:"mgmtIpNetmask" db:"mgmt_ip_netmask"`
diff --git a/lib/go-tc/staticdnsentry.go b/lib/go-tc/staticdnsentry.go
index d27610b07..509fc6140 100644
--- a/lib/go-tc/staticdnsentry.go
+++ b/lib/go-tc/staticdnsentry.go
@@ -19,11 +19,114 @@ package tc
  * under the License.
  */
 
+type StaticDNSEntriesResponse struct {
+	Response []StaticDNSEntry `json:"response"`
+}
+
 type StaticDNSEntry struct {
-	Address         string `json:"address" db:"address"`
-	CacheGroup      string `json:"cachegroup" db:"cachegroup"`
+
+	// The static IP Address or fqdn of the static dns entry
+	//
+	// required: true
+	Address string `json:"address" db:"address"`
+
+	// The Cachegroup Name associated
+	//
+	CacheGroupName string `json:"cachegroup" db:"cachegroup"`
+
+	// The Cachegroup ID associated
+	//
+	CacheGroupID int `json:"cachegroupId" db:"cachegroup_id"`
+
+	// The DeliveryService associated
+	//
 	DeliveryService string `json:"deliveryservice" db:"dsname"`
-	Host            string `json:"host" db:"host"`
-	TTL             int64  `json:"ttl" db:"ttl"`
-	Type            string `json:"type" db:"type"`
+
+	// The DeliveryService associated
+	//
+	// required: true
+	DeliveryServiceID int `json:"deliveryserviceId" db:"deliveryservice_id"`
+
+	// The host of the static dns entry
+	//
+	// required: true
+	Host string `json:"host" db:"host"`
+
+	// ID of the StaticDNSEntry
+	//
+	// required: true
+	ID int `json:"id" db:"id"`
+
+	// LastUpdated
+	//
+	LastUpdated TimeNoMod `json:"lastUpdated" db:"last_updated"`
+
+	// The Time To Live for the static dns entry
+	//
+	// required: true
+	TTL int64 `json:"ttl" db:"ttl"`
+
+	// The type of the static DNS entry
+	//
+	// enum: ["A_RECORD", "AAAA_RECORD", "CNAME_RECORD"]
+	Type string `json:"type"`
+
+	// The type id of the static DNS entry
+	//
+	// required: true
+	TypeID int `json:"typeId" db:"type_id"`
+}
+
+type StaticDNSEntryNullable struct {
+
+	// The static IP Address or fqdn of the static dns entry
+	//
+	// required: true
+	Address *string `json:"address" db:"address"`
+
+	// The Cachegroup Name associated
+	//
+	CacheGroupName *string `json:"cachegroup" db:"cachegroup"`
+
+	// The Cachegroup ID associated
+	//
+	CacheGroupID *int `json:"cachegroupId" db:"cachegroup_id"`
+
+	// The DeliveryService Name associated
+	//
+	DeliveryService *string `json:"deliveryservice" db:"dsname"`
+
+	// DeliveryService ID of the StaticDNSEntry
+	//
+	// required: true
+	DeliveryServiceID *int `json:"deliveryserviceId" db:"deliveryservice_id"`
+
+	// The host of the static dns entry
+	//
+	// required: true
+	Host *string `json:"host" db:"host"`
+
+	// ID of the StaticDNSEntry
+	//
+	// required: true
+	ID *int `json:"id" db:"id"`
+
+	// LastUpdated
+	//
+	LastUpdated *TimeNoMod `json:"lastUpdated" db:"last_updated"`
+
+	// The Time To Live for the static dns entry
+	//
+	// required: true
+	TTL *int64 `json:"ttl" db:"ttl"`
+
+	// The type of the static DNS entry
+	//
+	// enum: ["A_RECORD", "AAAA_RECORD", "CNAME_RECORD"]
+	Type *string `json:"type"`
+
+	// The type id of the static DNS entry
+	//
+	// required: true
+	TypeID int `json:"typeId" db:"type_id"`
 }
diff --git a/lib/go-tc/statuses.go b/lib/go-tc/statuses.go
index 43c26226b..4b00c1983 100644
--- a/lib/go-tc/statuses.go
+++ b/lib/go-tc/statuses.go
@@ -19,15 +19,42 @@ package tc
  * under the License.
  */
 
+// A List of Statuses Response that depict the state of a server
+// swagger:response StatusesResponse
 type StatusesResponse struct {
+	// in: body
 	Response []Status `json:"response"`
 }
 
+// A Single Status Response for Update and Create to depict what changed
+// swagger:response StatusResponse
+// in: body
+type StatusResponse struct {
+	// in: body
+	Response Status `json:"response"`
+}
+
+// A Single Statuses Response for Update and Create to depict what changed
+// swagger:model Statuses
 type Status struct {
-	Description string    `json:"description" db:"description"`
-	ID          int       `json:"id" db:"id"`
+
+	// The Statuses to retrieve
+	//
+	// description of the status type
+	//
+	Description string `json:"description" db:"description"`
+
+	// ID of the Status
+	//
+	// required: true
+	ID int `json:"id" db:"id"`
+
+	// The Time / Date this server entry was last updated
+	//
 	LastUpdated TimeNoMod `json:"lastUpdated" db:"last_updated"`
-	Name        string    `json:"name" db:"name"`
+
+	// enum: ["OFFLINE", "ONLINE", "ADMIN_DOWN", "REPORTED", "CCR_IGNORE", "PRE_PROD"]
+	Name string `json:"name" db:"name"`
 }
 
 type StatusNullable struct {
diff --git a/lib/go-tc/steeringtarget.go b/lib/go-tc/steeringtarget.go
new file mode 100644
index 000000000..17feaa3ca
--- /dev/null
+++ b/lib/go-tc/steeringtarget.go
@@ -0,0 +1,63 @@
+package tc
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import (
+	"database/sql"
+	"errors"
+	"strings"
+)
+
+type SteeringTarget struct {
+	DeliveryService   DeliveryServiceName `json:"deliveryService" db:"deliveryservice_name"`
+	DeliveryServiceID int                 `json:"deliveryServiceId" db:"deliveryservice"`
+	Target            DeliveryServiceName `json:"target" db:"target_name"`
+	TargetID          int                 `json:"targetId" db:"target"`
+	Type              string              `json:"type" db:"type"`      // TODO enum?
+	TypeID            int                 `json:"typeId" db:"type_id"` // TODO enum?
+	Value             int                 `json:"value" db:"value"`
+}
+
+type SteeringTargetNullable struct {
+	DeliveryService   *DeliveryServiceName `json:"deliveryService" db:"deliveryservice_name"`
+	DeliveryServiceID *uint64              `json:"deliveryServiceId" db:"deliveryservice"`
+	Target            *DeliveryServiceName `json:"target" db:"target_name"`
+	TargetID          *uint64              `json:"targetId" db:"target"`
+	Type              *string              `json:"type" db:"type_name"` // TODO enum?
+	TypeID            *int                 `json:"typeId" db:"type_id"` // TODO enum?
+	Value             *uint64              `json:"value" db:"value"`
+}
+
+func (st SteeringTargetNullable) Validate(tx *sql.Tx) error {
+	errs := []string{}
+	if st.TargetID == nil {
+		errs = append(errs, "missing target")
+	}
+	if st.TypeID == nil {
+		errs = append(errs, "missing typeId")
+	}
+	if st.Value == nil {
+		errs = append(errs, "missing value")
+	}
+	if len(errs) > 0 {
+		return errors.New(strings.Join(errs, "; "))
+	}
+	return nil
+}
diff --git a/lib/go-tc/v13/asns.go b/lib/go-tc/v13/asns.go
deleted file mode 100644
index 61f113d68..000000000
--- a/lib/go-tc/v13/asns.go
+++ /dev/null
@@ -1,90 +0,0 @@
-package v13
-
-import tc "github.com/apache/trafficcontrol/lib/go-tc"
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// Autonomous System Numbers
-//
-// A List of ASNs Response
-// swagger:response ASNsResponse
-// in: body
-type ASNsResponse struct {
-	// in: body
-	Response []ASN `json:"response"`
-}
-
-// A Single ASN Response for Update and Create to depict what changed
-// swagger:response ASNResponse
-// in: body
-type ASNResponse struct {
-	// in: body
-	Response ASN `json:"response"`
-}
-
-type ASN struct {
-	// The ASN to retrieve
-	//
-	// Autonomous System Numbers per APNIC for identifying a service provider
-	// required: true
-	ASN int `json:"asn" db:"asn"`
-
-	// Related cachegroup name
-	//
-	Cachegroup string `json:"cachegroup" db:"cachegroup"`
-
-	// Related cachegroup id
-	//
-	CachegroupID int `json:"cachegroupId" db:"cachegroup_id"`
-
-	// ID of the ASN
-	//
-	// required: true
-	ID int `json:"id" db:"id"`
-
-	// LastUpdated
-	//
-	LastUpdated string `json:"lastUpdated" db:"last_updated"`
-}
-
-type ASNNullable struct {
-	// The ASN to retrieve
-	//
-	// Autonomous System Numbers per APNIC for identifying a service provider
-	// required: true
-	ASN *int `json:"asn" db:"asn"`
-
-	// Related cachegroup name
-	//
-	Cachegroup *string `json:"cachegroup" db:"cachegroup"`
-
-	// Related cachegroup id
-	//
-	CachegroupID *int `json:"cachegroupId" db:"cachegroup_id"`
-
-	// ID of the ASN
-	//
-	// required: true
-	ID *int `json:"id" db:"id"`
-
-	// LastUpdated
-	//
-	LastUpdated *tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
-}
diff --git a/lib/go-tc/v13/cachegroups.go b/lib/go-tc/v13/cachegroups.go
deleted file mode 100644
index c2fce59b2..000000000
--- a/lib/go-tc/v13/cachegroups.go
+++ /dev/null
@@ -1,85 +0,0 @@
-package v13
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import (
-	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-util"
-)
-
-// CacheGroupResponse ...
-type CacheGroupsResponse struct {
-	Response []CacheGroup `json:"response"`
-}
-
-type CacheGroupsNullableResponse struct {
-	Response []CacheGroupNullable `json:"response"`
-}
-
-// CacheGroupDetailResponse is the JSON object returned for a single CacheGroup
-type CacheGroupDetailResponse struct {
-	Response CacheGroupNullable `json:"response"`
-	tc.Alerts
-}
-
-// CacheGroup contains information about a given Cachegroup in Traffic Ops.
-type CacheGroup struct {
-	ID                          int                     `json:"id" db:"id"`
-	Name                        string                  `json:"name" db:"name"`
-	ShortName                   string                  `json:"shortName" db:"short_name"`
-	Latitude                    float64                 `json:"latitude" db:"latitude"`
-	Longitude                   float64                 `json:"longitude" db:"longitude"`
-	ParentName                  string                  `json:"parentCachegroupName" db:"parent_cachegroup_name"`
-	ParentCachegroupID          int                     `json:"parentCachegroupId" db:"parent_cachegroup_id"`
-	SecondaryParentName         string                  `json:"secondaryParentCachegroupName" db:"secondary_parent_cachegroup_name"`
-	SecondaryParentCachegroupID int                     `json:"secondaryParentCachegroupId" db:"secondary_parent_cachegroup_id"`
-	FallbackToClosest           bool                    `json:"fallbackToClosest" db:"fallback_to_closest"`
-	LocalizationMethods         []tc.LocalizationMethod `json:"localizationMethods" db:"localization_methods"`
-	Type                        string                  `json:"typeName" db:"type_name"` // aliased to type_name to disambiguate struct scans due to join on 'type' table
-	TypeID                      int                     `json:"typeId" db:"type_id"`     // aliased to type_id to disambiguate struct scans due join on 'type' table
-	LastUpdated                 tc.TimeNoMod            `json:"lastUpdated" db:"last_updated"`
-}
-
-type CacheGroupNullable struct {
-	ID                          *int                     `json:"id" db:"id"`
-	Name                        *string                  `json:"name" db:"name"`
-	ShortName                   *string                  `json:"shortName" db:"short_name"`
-	Latitude                    *float64                 `json:"latitude" db:"latitude"`
-	Longitude                   *float64                 `json:"longitude"db:"longitude"`
-	ParentName                  *string                  `json:"parentCachegroupName" db:"parent_cachegroup_name"`
-	ParentCachegroupID          *int                     `json:"parentCachegroupId" db:"parent_cachegroup_id"`
-	SecondaryParentName         *string                  `json:"secondaryParentCachegroupName" db:"secondary_parent_cachegroup_name"`
-	SecondaryParentCachegroupID *int                     `json:"secondaryParentCachegroupId" db:"secondary_parent_cachegroup_id"`
-	FallbackToClosest           *bool                    `json:"fallbackToClosest" db:"fallback_to_closest"`
-	LocalizationMethods         *[]tc.LocalizationMethod `json:"localizationMethods" db:"localization_methods"`
-	Type                        *string                  `json:"typeName" db:"type_name"` // aliased to type_name to disambiguate struct scans due to join on 'type' table
-	TypeID                      *int                     `json:"typeId" db:"type_id"`     // aliased to type_id to disambiguate struct scans due join on 'type' table
-	LastUpdated                 *tc.TimeNoMod            `json:"lastUpdated" db:"last_updated"`
-}
-
-type CachegroupTrimmedName struct {
-	Name string `json:"name"`
-}
-
-type CachegroupQueueUpdatesRequest struct {
-	Action string           `json:"action"`
-	CDN    *tc.CDNName      `json:"cdn"`
-	CDNID  *util.JSONIntStr `json:"cdnId"`
-}
diff --git a/lib/go-tc/v13/divisions.go b/lib/go-tc/v13/divisions.go
deleted file mode 100644
index dc4c85094..000000000
--- a/lib/go-tc/v13/divisions.go
+++ /dev/null
@@ -1,54 +0,0 @@
-package v13
-
-import tc "github.com/apache/trafficcontrol/lib/go-tc"
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// A List of Divisions Response
-// swagger:response DivisionsResponse
-type DivisionsResponse struct {
-	// in: body
-	Response []Division `json:"response"`
-}
-
-// A Single Division Response for Update and Create to depict what changed
-// swagger:response DivisionResponse
-// in: body
-type DivisionResponse struct {
-	// in: body
-	Response Division `json:"response"`
-}
-
-// Division ...
-type Division struct {
-
-	// Division ID
-	//
-	ID int `json:"id" db:"id"`
-
-	// LastUpdated
-	//
-	LastUpdated tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
-
-	// Division Name
-	//
-	// required: true
-	Name string `json:"name" db:"name"`
-}
diff --git a/lib/go-tc/v13/origins.go b/lib/go-tc/v13/origins.go
deleted file mode 100644
index 7410ecd23..000000000
--- a/lib/go-tc/v13/origins.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package v13
-
-import (
-	"github.com/apache/trafficcontrol/lib/go-tc"
-)
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-type OriginsResponse struct {
-	Response []Origin `json:"response"`
-}
-
-// OriginDetailResponse is the JSON object returned for a single origin
-type OriginDetailResponse struct {
-	Response Origin `json:"response"`
-	tc.Alerts
-}
-
-type Origin struct {
-	Cachegroup        *string       `json:"cachegroup" db:"cachegroup"`
-	CachegroupID      *int          `json:"cachegroupId" db:"cachegroup_id"`
-	Coordinate        *string       `json:"coordinate" db:"coordinate"`
-	CoordinateID      *int          `json:"coordinateId" db:"coordinate_id"`
-	DeliveryService   *string       `json:"deliveryService" db:"deliveryservice"`
-	DeliveryServiceID *int          `json:"deliveryServiceId" db:"deliveryservice_id"`
-	FQDN              *string       `json:"fqdn" db:"fqdn"`
-	ID                *int          `json:"id" db:"id"`
-	IP6Address        *string       `json:"ip6Address" db:"ip6_address"`
-	IPAddress         *string       `json:"ipAddress" db:"ip_address"`
-	IsPrimary         *bool         `json:"isPrimary" db:"is_primary"`
-	LastUpdated       *tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
-	Name              *string       `json:"name" db:"name"`
-	Port              *int          `json:"port" db:"port"`
-	Profile           *string       `json:"profile" db:"profile"`
-	ProfileID         *int          `json:"profileId" db:"profile_id"`
-	Protocol          *string       `json:"protocol" db:"protocol"`
-	Tenant            *string       `json:"tenant" db:"tenant"`
-	TenantID          *int          `json:"tenantId" db:"tenant_id"`
-}
\ No newline at end of file
diff --git a/lib/go-tc/v13/parameters.go b/lib/go-tc/v13/parameters.go
deleted file mode 100644
index 987332925..000000000
--- a/lib/go-tc/v13/parameters.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package v13
-
-import (
-	"encoding/json"
-
-	tc "github.com/apache/trafficcontrol/lib/go-tc"
-)
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// ParametersResponse ...
-type ParametersResponse struct {
-	Response []Parameter `json:"response"`
-}
-
-// Parameter ...
-type Parameter struct {
-	ConfigFile  string          `json:"configFile" db:"config_file"`
-	ID          int             `json:"id" db:"id"`
-	LastUpdated tc.TimeNoMod    `json:"lastUpdated" db:"last_updated"`
-	Name        string          `json:"name" db:"name"`
-	Profiles    json.RawMessage `json:"profiles" db:"profiles"`
-	Secure      bool            `json:"secure" db:"secure"`
-	Value       string          `json:"value" db:"value"`
-}
-
-// ParameterNullable - a struct version that allows for all fields to be null, mostly used by the API side
-type ParameterNullable struct {
-	//
-	// NOTE: the db: struct tags are used for testing to map to their equivalent database column (if there is one)
-	//
-	ConfigFile  *string         `json:"configFile" db:"config_file"`
-	ID          *int            `json:"id" db:"id"`
-	LastUpdated *tc.TimeNoMod   `json:"lastUpdated" db:"last_updated"`
-	Name        *string         `json:"name" db:"name"`
-	Profiles    json.RawMessage `json:"profiles" db:"profiles"`
-	Secure      *bool           `json:"secure" db:"secure"`
-	Value       *string         `json:"value" db:"value"`
-}
diff --git a/lib/go-tc/v13/physlocations.go b/lib/go-tc/v13/physlocations.go
deleted file mode 100644
index 5a8d360c5..000000000
--- a/lib/go-tc/v13/physlocations.go
+++ /dev/null
@@ -1,194 +0,0 @@
-package v13
-
-import tc "github.com/apache/trafficcontrol/lib/go-tc"
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-type PhysLocationsResponse struct {
-	Response []PhysLocation `json:"response"`
-}
-
-type PhysLocationResponse struct {
-	Response PhysLocationNullable `json:"response"`
-}
-
-type PhysLocation struct {
-
-	//
-	// The Street Address of the physical location
-	//
-	// required: true
-	Address string `json:"address" db:"address"`
-
-	//
-	// The Address of the physical location
-	//
-	// required: true
-	City string `json:"city" db:"city"`
-
-	//
-	// comments are additional details about the physical location
-	//
-	Comments string `json:"comments" db:"comments"`
-
-	//
-	// The email address for the Point of Contact at the physical location
-	//
-	Email string `json:"email" db:"email"`
-
-	//
-	// The name of the physical location
-	//
-	// required: true
-	ID int `json:"id" db:"id"`
-
-	// Timestamp of the last time this row was updated
-	//
-	LastUpdated tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
-
-	//
-	// The name of the physical location
-	//
-	// required: true
-	Name string `json:"name" db:"name"`
-
-	//
-	// The phone number of the physical location
-	//
-	// required: true
-	Phone string `json:"phone" db:"phone"`
-
-	//
-	// The Point Of Contact at the physical location
-	//
-	// required: true
-	POC string `json:"poc" db:"poc"`
-
-	//
-	// The RegionID associated to this physical location
-	//
-	// required: true
-	RegionID int `json:"regionId" db:"region"`
-
-	//
-	// The Region Name for the region associated to this physical location
-	//
-	RegionName string `json:"region" db:"region_name"`
-
-	//
-	// The shortName for the physical location (like an alias)
-	//
-	// required: true
-	ShortName string `json:"shortName" db:"short_name"`
-
-	//
-	// The State for the physical location
-	//
-	// required: true
-	State string `json:"state" db:"state"`
-
-	//
-	// The Zipcode for the physical location
-	//
-	// required: true
-	Zip string `json:"zip" db:"zip"`
-}
-
-// PhysLocationNullable - a struct version that allows for all fields to be null
-type PhysLocationNullable struct {
-	//
-	// The Street Address of the physical location
-	//
-	// required: true
-	Address *string `json:"address" db:"address"`
-
-	//
-	// The Address of the physical location
-	//
-	// required: true
-	City *string `json:"city" db:"city"`
-
-	//
-	// comments are additional details about the physical location
-	//
-	Comments *string `json:"comments" db:"comments"`
-
-	//
-	// The email address for the Point of Contact at the physical location
-	//
-	Email *string `json:"email" db:"email"`
-
-	//
-	// The name of the physical location
-	//
-	// required: true
-	ID *int `json:"id" db:"id"`
-
-	// Timestamp of the last time this row was updated
-	//
-	LastUpdated *tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
-
-	//
-	// The name of the physical location
-	//
-	// required: true
-	Name *string `json:"name" db:"name"`
-
-	//
-	// The phone number of the physical location
-	//
-	// required: true
-	Phone *string `json:"phone" db:"phone"`
-
-	//
-	// The Point Of Contact at the physical location
-	//
-	// required: true
-	POC *string `json:"poc" db:"poc"`
-
-	//
-	// The RegionID associated to this physical location
-	//
-	// required: true
-	RegionID *int `json:"regionId" db:"region"`
-
-	//
-	// The Region Name for the region associated to this physical location
-	//
-	RegionName *string `json:"region" db:"region_name"`
-
-	//
-	// The shortName for the physical location (like an alias)
-	//
-	// required: true
-	ShortName *string `json:"shortName" db:"short_name"`
-
-	//
-	// The State for the physical location
-	//
-	// required: true
-	State *string `json:"state" db:"state"`
-
-	//
-	// The Zipcode for the physical location
-	//
-	// required: true
-	Zip *string `json:"zip" db:"zip"`
-}
diff --git a/lib/go-tc/v13/profiles.go b/lib/go-tc/v13/profiles.go
deleted file mode 100644
index 965c6ba93..000000000
--- a/lib/go-tc/v13/profiles.go
+++ /dev/null
@@ -1,93 +0,0 @@
-package v13
-
-import tc "github.com/apache/trafficcontrol/lib/go-tc"
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// ProfilesResponse ...
-type ProfilesResponse struct {
-	Response []Profile `json:"response"`
-}
-
-// A Single Profile Response for Update and Create to depict what changed
-// swagger:response ProfileResponse
-// in: body
-type ProfileResponse struct {
-	// in: body
-	Response Profile `json:"response"`
-}
-
-// Profile ...
-type Profile struct {
-	ID int `json:"id" db:"id"`
-
-	// LastUpdated
-	//
-	LastUpdated tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
-
-	Name            string              `json:"name"`
-	Parameter       string              `json:"param"`
-	Description     string              `json:"description"`
-	CDNName         string              `json:"cdnName"`
-	CDNID           int                 `json:"cdn"`
-	RoutingDisabled bool                `json:"routingDisabled"`
-	Type            string              `json:"type"`
-	Parameters      []ParameterNullable `json:"params,omitempty"`
-}
-
-// ProfileNullable ...
-type ProfileNullable struct {
-
-	// Unique identifier for the Profile
-	//
-	ID *int `json:"id" db:"id"`
-
-	// LastUpdated
-	//
-	LastUpdated *tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
-
-	// The Profile name
-	//
-	Name *string `json:"name" db:"name"`
-
-	// The Profile Description
-	//
-	Description *string `json:"description" db:"description"`
-
-	// The CDN name associated with the Profile
-	//
-	CDNName *string `json:"cdnName" db:"cdn_name"`
-
-	// The CDN id associated with the Profile
-	//
-	CDNID *int `json:"cdn" db:"cdn"`
-
-	// Enables
-	//
-	RoutingDisabled *bool `json:"routingDisabled" db:"routing_disabled"`
-
-	// The Type name associated with the Profile
-	//
-	Type *string `json:"type" db:"type"`
-
-	// Parameters associated to the profile
-	//
-	Parameters []ParameterNullable `json:"params,omitempty"`
-}
diff --git a/lib/go-tc/v13/regions.go b/lib/go-tc/v13/regions.go
deleted file mode 100644
index 99dad5cd0..000000000
--- a/lib/go-tc/v13/regions.go
+++ /dev/null
@@ -1,66 +0,0 @@
-package v13
-
-import tc "github.com/apache/trafficcontrol/lib/go-tc"
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// A List of Regions Response
-// swagger:response RegionsResponse
-// in: body
-type RegionsResponse struct {
-	// in: body
-	Response []Region `json:"response"`
-}
-
-// A Single Region Response for Update and Create to depict what changed
-// swagger:response RegionResponse
-// in: body
-type RegionResponse struct {
-	// in: body
-	Response Region `json:"response"`
-}
-
-type Region struct {
-
-	// The Region to retrieve
-
-	// DivisionName - Name of the Division associated to this Region
-	//
-	// required: true
-	DivisionName string `json:"divisionName"`
-
-	// DivisionName of the Division
-	//
-	// required: true
-	Division int `json:"division" db:"division"`
-
-	// Region ID
-	//
-	ID int `json:"id" db:"id"`
-
-	// LastUpdated
-	//
-	LastUpdated tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
-
-	// Region Name
-	//
-	// required: true
-	Name string `json:"name" db:"name"`
-}
diff --git a/lib/go-tc/v13/servers.go b/lib/go-tc/v13/servers.go
deleted file mode 100644
index cd64e6b82..000000000
--- a/lib/go-tc/v13/servers.go
+++ /dev/null
@@ -1,144 +0,0 @@
-package v13
-
-import (
-	"time"
-
-	tc "github.com/apache/trafficcontrol/lib/go-tc"
-)
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-type ServersResponse struct {
-	Response []Server `json:"response"`
-}
-
-// ServerDetailResponse is the JSON object returned for a single server
-type ServersDetailResponse struct {
-	Response Server `json:"response"`
-}
-
-type Server struct {
-	Cachegroup       string              `json:"cachegroup" db:"cachegroup"`
-	CachegroupID     int                 `json:"cachegroupId" db:"cachegroup_id"`
-	CDNID            int                 `json:"cdnId" db:"cdn_id"`
-	CDNName          string              `json:"cdnName" db:"cdn_name"`
-	DeliveryServices map[string][]string `json:"deliveryServices,omitempty"`
-	DomainName       string              `json:"domainName" db:"domain_name"`
-	FQDN             *string             `json:"fqdn,omitempty"`
-	FqdnTime         time.Time           `json:"-"`
-	GUID             string              `json:"guid" db:"guid"`
-	HostName         string              `json:"hostName" db:"host_name"`
-	HTTPSPort        int                 `json:"httpsPort" db:"https_port"`
-	ID               int                 `json:"id" db:"id"`
-	ILOIPAddress     string              `json:"iloIpAddress" db:"ilo_ip_address"`
-	ILOIPGateway     string              `json:"iloIpGateway" db:"ilo_ip_gateway"`
-	ILOIPNetmask     string              `json:"iloIpNetmask" db:"ilo_ip_netmask"`
-	ILOPassword      string              `json:"iloPassword" db:"ilo_password"`
-	ILOUsername      string              `json:"iloUsername" db:"ilo_username"`
-	InterfaceMtu     int                 `json:"interfaceMtu" db:"interface_mtu"`
-	InterfaceName    string              `json:"interfaceName" db:"interface_name"`
-	IP6Address       string              `json:"ip6Address" db:"ip6_address"`
-	IP6Gateway       string              `json:"ip6Gateway" db:"ip6_gateway"`
-	IPAddress        string              `json:"ipAddress" db:"ip_address"`
-	IPGateway        string              `json:"ipGateway" db:"ip_gateway"`
-	IPNetmask        string              `json:"ipNetmask" db:"ip_netmask"`
-	LastUpdated      tc.TimeNoMod        `json:"lastUpdated" db:"last_updated"`
-	MgmtIPAddress    string              `json:"mgmtIpAddress" db:"mgmt_ip_address"`
-	MgmtIPGateway    string              `json:"mgmtIpGateway" db:"mgmt_ip_gateway"`
-	MgmtIPNetmask    string              `json:"mgmtIpNetmask" db:"mgmt_ip_netmask"`
-	OfflineReason    string              `json:"offlineReason" db:"offline_reason"`
-	PhysLocation     string              `json:"physLocation" db:"phys_location"`
-	PhysLocationID   int                 `json:"physLocationId" db:"phys_location_id"`
-	Profile          string              `json:"profile" db:"profile"`
-	ProfileDesc      string              `json:"profileDesc" db:"profile_desc"`
-	ProfileID        int                 `json:"profileId" db:"profile_id"`
-	Rack             string              `json:"rack" db:"rack"`
-	RevalPending     bool                `json:"revalPending" db:"reval_pending"`
-	RouterHostName   string              `json:"routerHostName" db:"router_host_name"`
-	RouterPortName   string              `json:"routerPortName" db:"router_port_name"`
-	Status           string              `json:"status" db:"status"`
-	StatusID         int                 `json:"statusId" db:"status_id"`
-	TCPPort          int                 `json:"tcpPort" db:"tcp_port"`
-	Type             string              `json:"type" db:"server_type"`
-	TypeID           int                 `json:"typeId" db:"server_type_id"`
-	TypeName         string              `json:"typeName" db:"server_type_name"`
-	UpdPending       bool                `json:"updPending" db:"upd_pending"`
-	XMPPID           string              `json:"xmppId" db:"xmpp_id"`
-	XMPPPasswd       string              `json:"xmppPasswd" db:"xmpp_passwd"`
-}
-
-type ServerNullable struct {
-	Cachegroup       *string              `json:"cachegroup" db:"cachegroup"`
-	CachegroupID     *int                 `json:"cachegroupId" db:"cachegroup_id"`
-	CDNID            *int                 `json:"cdnId" db:"cdn_id"`
-	CDNName          *string              `json:"cdnName" db:"cdn_name"`
-	DeliveryServices *map[string][]string `json:"deliveryServices,omitempty"`
-	DomainName       *string              `json:"domainName" db:"domain_name"`
-	FQDN             *string              `json:"fqdn,omitempty"`
-	FqdnTime         time.Time            `json:"-"`
-	GUID             *string              `json:"guid" db:"guid"`
-	HostName         *string              `json:"hostName" db:"host_name"`
-	HTTPSPort        *int                 `json:"httpsPort" db:"https_port"`
-	ID               *int                 `json:"id" db:"id"`
-	ILOIPAddress     *string              `json:"iloIpAddress" db:"ilo_ip_address"`
-	ILOIPGateway     *string              `json:"iloIpGateway" db:"ilo_ip_gateway"`
-	ILOIPNetmask     *string              `json:"iloIpNetmask" db:"ilo_ip_netmask"`
-	ILOPassword      *string              `json:"iloPassword" db:"ilo_password"`
-	ILOUsername      *string              `json:"iloUsername" db:"ilo_username"`
-	InterfaceMtu     *int                 `json:"interfaceMtu" db:"interface_mtu"`
-	InterfaceName    *string              `json:"interfaceName" db:"interface_name"`
-	IP6Address       *string              `json:"ip6Address" db:"ip6_address"`
-	IP6Gateway       *string              `json:"ip6Gateway" db:"ip6_gateway"`
-	IPAddress        *string              `json:"ipAddress" db:"ip_address"`
-	IPGateway        *string              `json:"ipGateway" db:"ip_gateway"`
-	IPNetmask        *string              `json:"ipNetmask" db:"ip_netmask"`
-	LastUpdated      *tc.TimeNoMod        `json:"lastUpdated" db:"last_updated"`
-	MgmtIPAddress    *string              `json:"mgmtIpAddress" db:"mgmt_ip_address"`
-	MgmtIPGateway    *string              `json:"mgmtIpGateway" db:"mgmt_ip_gateway"`
-	MgmtIPNetmask    *string              `json:"mgmtIpNetmask" db:"mgmt_ip_netmask"`
-	OfflineReason    *string              `json:"offlineReason" db:"offline_reason"`
-	PhysLocation     *string              `json:"physLocation" db:"phys_location"`
-	PhysLocationID   *int                 `json:"physLocationId" db:"phys_location_id"`
-	Profile          *string              `json:"profile" db:"profile"`
-	ProfileDesc      *string              `json:"profileDesc" db:"profile_desc"`
-	ProfileID        *int                 `json:"profileId" db:"profile_id"`
-	Rack             *string              `json:"rack" db:"rack"`
-	RevalPending     *bool                `json:"revalPending" db:"reval_pending"`
-	RouterHostName   *string              `json:"routerHostName" db:"router_host_name"`
-	RouterPortName   *string              `json:"routerPortName" db:"router_port_name"`
-	Status           *string              `json:"status" db:"status"`
-	StatusID         *int                 `json:"statusId" db:"status_id"`
-	TCPPort          *int                 `json:"tcpPort" db:"tcp_port"`
-	Type             string               `json:"type" db:"server_type"`
-	TypeID           *int                 `json:"typeId" db:"server_type_id"`
-	UpdPending       *bool                `json:"updPending" db:"upd_pending"`
-	XMPPID           *string              `json:"xmppId" db:"xmpp_id"`
-	XMPPPasswd       *string              `json:"xmppPasswd" db:"xmpp_passwd"`
-}
-
-type ServerUpdateStatus struct {
-	HostName           string `json:"host_name"`
-	UpdatePending      bool   `json:"upd_pending"`
-	RevalPending       bool   `json:"reval_pending"`
-	HostId             int    `json:"host_id"`
-	Status             string `json:"status"`
-	ParentPending      bool   `json:"parent_pending"`
-	ParentRevalPending bool   `json:"parent_reval_pending"`
-}
diff --git a/lib/go-tc/v13/staticdnsentry.go b/lib/go-tc/v13/staticdnsentry.go
deleted file mode 100644
index cfb1ef8ac..000000000
--- a/lib/go-tc/v13/staticdnsentry.go
+++ /dev/null
@@ -1,137 +0,0 @@
-package v13
-
-import tc "github.com/apache/trafficcontrol/lib/go-tc"
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// StaticDNSEntries ...
-type StaticDNSEntriesResponse struct {
-	Response []StaticDNSEntry `json:"response"`
-}
-
-// StatisDNSEntry ...
-type StaticDNSEntry struct {
-
-	// The static IP Address or fqdn of the static dns entry
-	//
-	// required: true
-	Address string `json:"address" db:"address"`
-
-	// The Cachegroup Name associated
-	//
-	CacheGroupName string `json:"cachegroup"`
-
-	// The Cachegroup ID associated
-	//
-	CacheGroupID int `json:"cachegroupId" db:"cachegroup_id"`
-
-	// The DeliveryService associated
-	//
-	DeliveryService string `json:"deliveryservice" db:"dsname"`
-
-	// The DeliveryService associated
-	//
-	// required: true
-	DeliveryServiceID int `json:"deliveryserviceId" db:"deliveryservice_id"`
-
-	// The host of the static dns entry
-	//
-	// required: true
-	Host string `json:"host" db:"host"`
-
-	// ID of the StaticDNSEntry
-	//
-	// required: true
-	ID int `json:"id" db:"id"`
-
-	// LastUpdated
-	//
-	LastUpdated tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
-
-	// The Time To Live for the static dns entry
-	//
-	// required: true
-	TTL int64 `json:"ttl" db:"ttl"`
-
-	// The type of the static DNS entry
-	//
-	// enum: ["A_RECORD", "AAAA_RECORD", "CNAME_RECORD"]
-	Type string `json:"type"`
-
-	// The type id of the static DNS entry
-	//
-	// required: true
-	TypeID int `json:"typeId" db:"type_id"`
-}
-
-// StatisDNSEntryNullable ...
-type StaticDNSEntryNullable struct {
-
-	// The static IP Address or fqdn of the static dns entry
-	//
-	// required: true
-	Address *string `json:"address" db:"address"`
-
-	// The Cachegroup Name associated
-	//
-	CacheGroupName *string `json:"cachegroup" db:"cachegroup"`
-
-	// The Cachegroup ID associated
-	//
-	CacheGroupID *int `json:"cachegroupId" db:"cachegroup_id"`
-
-	// The DeliveryService Name associated
-	//
-	DeliveryService *string `json:"deliveryservice" db:"dsname"`
-
-	// DeliveryService ID of the StaticDNSEntry
-	//
-	// required: true
-	DeliveryServiceID *int `json:"deliveryserviceId" db:"deliveryservice_id"`
-
-	// The host of the static dns entry
-	//
-	// required: true
-	Host *string `json:"host" db:"host"`
-
-	// ID of the StaticDNSEntry
-	//
-	// required: true
-	ID *int `json:"id" db:"id"`
-
-	// LastUpdated
-	//
-	LastUpdated *tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
-
-	// The Time To Live for the static dns entry
-	//
-	// required: true
-	TTL *int64 `json:"ttl" db:"ttl"`
-
-	// The type of the static DNS entry
-	//
-	// enum: ["A_RECORD", "AAAA_RECORD", "CNAME_RECORD"]
-	Type *string `json:"type"`
-
-	// The type id of the static DNS entry
-	//
-	// required: true
-	TypeID int `json:"typeId" db:"type_id"`
-}
diff --git a/lib/go-tc/v13/statuses.go b/lib/go-tc/v13/statuses.go
deleted file mode 100644
index 26b2f0d1c..000000000
--- a/lib/go-tc/v13/statuses.go
+++ /dev/null
@@ -1,60 +0,0 @@
-package v13
-
-import tc "github.com/apache/trafficcontrol/lib/go-tc"
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// A List of Statuses Response that depict the state of a server
-// swagger:response StatusesResponse
-type StatusesResponse struct {
-	// in: body
-	Response []Status `json:"response"`
-}
-
-// A Single Status Response for Update and Create to depict what changed
-// swagger:response StatusResponse
-// in: body
-type StatusResponse struct {
-	// in: body
-	Response Status `json:"response"`
-}
-
-// A Single Statuses Response for Update and Create to depict what changed
-// swagger:model Statuses
-type Status struct {
-
-	// The Statuses to retrieve
-	//
-	// description of the status type
-	//
-	Description string `json:"description" db:"description"`
-
-	// ID of the Status
-	//
-	// required: true
-	ID int `json:"id" db:"id"`
-
-	// The Time / Date this server entry was last updated
-	//
-	LastUpdated tc.TimeNoMod `json:"lastUpdated" db:"last_updated"`
-
-	// enum: ["OFFLINE", "ONLINE", "ADMIN_DOWN", "REPORTED", "CCR_IGNORE", "PRE_PROD"]
-	Name string `json:"name" db:"name"`
-}
diff --git a/traffic_monitor/manager/opsconfig.go b/traffic_monitor/manager/opsconfig.go
index 4674c6ce2..c31584366 100644
--- a/traffic_monitor/manager/opsconfig.go
+++ b/traffic_monitor/manager/opsconfig.go
@@ -37,7 +37,7 @@ import (
 	"github.com/apache/trafficcontrol/traffic_monitor/threadsafe"
 	"github.com/apache/trafficcontrol/traffic_monitor/todata"
 	"github.com/apache/trafficcontrol/traffic_monitor/towrap"
-	to "github.com/apache/trafficcontrol/traffic_ops/client/v13"
+	to "github.com/apache/trafficcontrol/traffic_ops/client"
 )
 
 // StartOpsConfigManager starts the ops config manager goroutine, returning the (threadsafe) variables which it sets.
diff --git a/traffic_monitor/towrap/towrap.go b/traffic_monitor/towrap/towrap.go
index e047f4f88..91cffa585 100644
--- a/traffic_monitor/towrap/towrap.go
+++ b/traffic_monitor/towrap/towrap.go
@@ -29,8 +29,7 @@ import (
 
 	"github.com/apache/trafficcontrol/lib/go-log"
 	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
-	client "github.com/apache/trafficcontrol/traffic_ops/client/v13"
+	"github.com/apache/trafficcontrol/traffic_ops/client"
 )
 
 // ITrafficOpsSession provides an interface to the Traffic Ops client, so it may be wrapped or mocked.
@@ -41,11 +40,11 @@ type ITrafficOpsSession interface {
 	Set(session *client.Session)
 	URL() (string, error)
 	User() (string, error)
-	Servers() ([]v13.Server, error)
-	Profiles() ([]v13.Profile, error)
+	Servers() ([]tc.Server, error)
+	Profiles() ([]tc.Profile, error)
 	Parameters(profileName string) ([]tc.Parameter, error)
 	DeliveryServices() ([]tc.DeliveryServiceV13, error)
-	CacheGroups() ([]v13.CacheGroupNullable, error)
+	CacheGroups() ([]tc.CacheGroupNullable, error)
 	CRConfigHistory() []CRConfigStat
 }
 
@@ -419,7 +418,7 @@ func CreateMonitorConfig(crConfig tc.CRConfig, mc *tc.TrafficMonitorConfigMap) (
 	return mc, nil
 }
 
-func (s TrafficOpsSessionThreadsafe) Servers() ([]v13.Server, error) {
+func (s TrafficOpsSessionThreadsafe) Servers() ([]tc.Server, error) {
 	ss := s.get()
 	if ss == nil {
 		return nil, ErrNilSession
@@ -428,7 +427,7 @@ func (s TrafficOpsSessionThreadsafe) Servers() ([]v13.Server, error) {
 	return servers, error
 }
 
-func (s TrafficOpsSessionThreadsafe) Profiles() ([]v13.Profile, error) {
+func (s TrafficOpsSessionThreadsafe) Profiles() ([]tc.Profile, error) {
 	ss := s.get()
 	if ss == nil {
 		return nil, ErrNilSession
@@ -455,7 +454,7 @@ func (s TrafficOpsSessionThreadsafe) DeliveryServices() ([]tc.DeliveryServiceV13
 	return deliveryServices, error
 }
 
-func (s TrafficOpsSessionThreadsafe) CacheGroups() ([]v13.CacheGroupNullable, error) {
+func (s TrafficOpsSessionThreadsafe) CacheGroups() ([]tc.CacheGroupNullable, error) {
 	ss := s.get()
 	if ss == nil {
 		return nil, ErrNilSession
diff --git a/traffic_ops/client/README.md b/traffic_ops/client/README.md
index 8a5efdd9b..f445a222f 100644
--- a/traffic_ops/client/README.md
+++ b/traffic_ops/client/README.md
@@ -1,5 +1,4 @@
 # TO Client Library Golang
-_This version of the SDK is deprecated in favor of the newer [TO API v1.3 Client Library](https://github.com/apache/trafficcontrol/tree/master/traffic_ops/client/v13)_
 
 ## Getting Started
 1. Obtain the latest version of the library
@@ -15,7 +14,7 @@ import (
 	"os"
 	"time"
 
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 	toclient "github.com/apache/trafficcontrol/traffic_ops/client"
 )
 
diff --git a/traffic_ops/client/v13/about.go b/traffic_ops/client/about.go
similarity index 98%
rename from traffic_ops/client/v13/about.go
rename to traffic_ops/client/about.go
index 495e27843..8aa345e33 100644
--- a/traffic_ops/client/v13/about.go
+++ b/traffic_ops/client/about.go
@@ -13,7 +13,7 @@
    limitations under the License.
 */
 
-package v13
+package client
 
 import (
 	"encoding/json"
diff --git a/traffic_ops/client/v13/asn.go b/traffic_ops/client/asn.go
similarity index 99%
rename from traffic_ops/client/v13/asn.go
rename to traffic_ops/client/asn.go
index c368eff67..2a38c656d 100644
--- a/traffic_ops/client/v13/asn.go
+++ b/traffic_ops/client/asn.go
@@ -13,7 +13,7 @@
    limitations under the License.
 */
 
-package v13
+package client
 
 import (
 	"encoding/json"
diff --git a/traffic_ops/client/cachegroup.go b/traffic_ops/client/cachegroup.go
index f866a4b54..bc3792688 100644
--- a/traffic_ops/client/cachegroup.go
+++ b/traffic_ops/client/cachegroup.go
@@ -17,31 +17,226 @@ package client
 
 import (
 	"encoding/json"
+	"fmt"
+	"net"
+	"net/http"
 
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 )
 
+const (
+	API_v13_CacheGroups = "/api/1.3/cachegroups"
+)
+
+// Create a CacheGroup
+func (to *Session) CreateCacheGroupNullable(cachegroup tc.CacheGroupNullable) (*tc.CacheGroupDetailResponse, ReqInf, error) {
+
+	var remoteAddr net.Addr
+	reqBody, err := json.Marshal(cachegroup)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_CacheGroups, reqBody)
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+	var cachegroupResp tc.CacheGroupDetailResponse
+	if err = json.NewDecoder(resp.Body).Decode(&cachegroupResp); err != nil {
+		return nil, reqInf, err
+	}
+	return &cachegroupResp, reqInf, nil
+}
+
+// Create a CacheGroup
+// Deprecated: Use CreateCacheGroupNullable
+func (to *Session) CreateCacheGroup(cachegroup tc.CacheGroup) (tc.Alerts, ReqInf, error) {
+
+	var remoteAddr net.Addr
+	reqBody, err := json.Marshal(cachegroup)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_CacheGroups, reqBody)
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	defer resp.Body.Close()
+	var alerts tc.Alerts
+	err = json.NewDecoder(resp.Body).Decode(&alerts)
+	return alerts, reqInf, nil
+}
+
+// Update a CacheGroup by ID
+func (to *Session) UpdateCacheGroupNullableByID(id int, cachegroup tc.CacheGroupNullable) (*tc.CacheGroupDetailResponse, ReqInf, error) {
+
+	var remoteAddr net.Addr
+	reqBody, err := json.Marshal(cachegroup)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	route := fmt.Sprintf("%s/%d", API_v13_CacheGroups, id)
+	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+	var cachegroupResp tc.CacheGroupDetailResponse
+	if err = json.NewDecoder(resp.Body).Decode(&cachegroupResp); err != nil {
+		return nil, reqInf, err
+	}
+	return &cachegroupResp, reqInf, nil
+}
+
+// Update a CacheGroup by ID
+// Deprecated: use UpdateCachegroupNullableByID
+func (to *Session) UpdateCacheGroupByID(id int, cachegroup tc.CacheGroup) (tc.Alerts, ReqInf, error) {
+
+	var remoteAddr net.Addr
+	reqBody, err := json.Marshal(cachegroup)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	route := fmt.Sprintf("%s/%d", API_v13_CacheGroups, id)
+	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	defer resp.Body.Close()
+	var alerts tc.Alerts
+	err = json.NewDecoder(resp.Body).Decode(&alerts)
+	return alerts, reqInf, nil
+}
+
+// Returns a list of CacheGroups
+func (to *Session) GetCacheGroupsNullable() ([]tc.CacheGroupNullable, ReqInf, error) {
+	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_CacheGroups, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.CacheGroupsNullableResponse
+	if err = json.NewDecoder(resp.Body).Decode(&data); err != nil {
+		return nil, reqInf, err
+	}
+	return data.Response, reqInf, nil
+}
+
+// Returns a list of CacheGroups
+// Deprecated: use GetCacheGroupsNullable
+func (to *Session) GetCacheGroups() ([]tc.CacheGroup, ReqInf, error) {
+	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_CacheGroups, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.CacheGroupsResponse
+	err = json.NewDecoder(resp.Body).Decode(&data)
+	return data.Response, reqInf, nil
+}
+
 // CacheGroups gets the CacheGroups in an array of CacheGroup structs
 // (note CacheGroup used to be called location)
 // Deprecated: use GetCacheGroups.
-func (to *Session) CacheGroups() ([]v13.CacheGroup, error) {
+func (to *Session) CacheGroups() ([]tc.CacheGroup, error) {
 	cgs, _, err := to.GetCacheGroups()
 	return cgs, err
 }
 
-func (to *Session) GetCacheGroups() ([]v13.CacheGroup, ReqInf, error) {
-	url := "/api/1.2/cachegroups.json"
-	resp, remoteAddr, err := to.request("GET", url, nil) // TODO change to getBytesWithTTL, return CacheHitStatus
+// GET a CacheGroup by the CacheGroup id
+func (to *Session) GetCacheGroupNullableByID(id int) ([]tc.CacheGroupNullable, ReqInf, error) {
+	route := fmt.Sprintf("%s/%d", API_v13_CacheGroups, id)
+	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.CacheGroupsNullableResponse
+	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
+		return nil, reqInf, err
+	}
+
+	return data.Response, reqInf, nil
+}
+
+// GET a CacheGroup by the CacheGroup id
+// Deprecated: use GetCacheGroupNullableByID
+func (to *Session) GetCacheGroupByID(id int) ([]tc.CacheGroup, ReqInf, error) {
+	route := fmt.Sprintf("%s/%d", API_v13_CacheGroups, id)
+	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.CacheGroupsResponse
+	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
+		return nil, reqInf, err
+	}
+
+	return data.Response, reqInf, nil
+}
+
+// GET a CacheGroup by the CacheGroup name
+func (to *Session) GetCacheGroupNullableByName(name string) ([]tc.CacheGroupNullable, ReqInf, error) {
+	url := fmt.Sprintf("%s?name=%s", API_v13_CacheGroups, name)
+	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.CacheGroupsNullableResponse
+	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
+		return nil, reqInf, err
+	}
+
+	return data.Response, reqInf, nil
+}
+
+// GET a CacheGroup by the CacheGroup name
+// Deprecated: use GetCachegroupNullableByName
+func (to *Session) GetCacheGroupByName(name string) ([]tc.CacheGroup, ReqInf, error) {
+	url := fmt.Sprintf("%s?name=%s", API_v13_CacheGroups, name)
+	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
 		return nil, reqInf, err
 	}
 	defer resp.Body.Close()
 
-	var data v13.CacheGroupsResponse
+	var data tc.CacheGroupsResponse
 	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
 		return nil, reqInf, err
 	}
 
 	return data.Response, reqInf, nil
 }
+
+// DELETE a CacheGroup by ID
+func (to *Session) DeleteCacheGroupByID(id int) (tc.Alerts, ReqInf, error) {
+	route := fmt.Sprintf("%s/%d", API_v13_CacheGroups, id)
+	resp, remoteAddr, err := to.request(http.MethodDelete, route, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	defer resp.Body.Close()
+	var alerts tc.Alerts
+	if err = json.NewDecoder(resp.Body).Decode(&alerts); err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	return alerts, reqInf, nil
+}
diff --git a/traffic_ops/client/cdn.go b/traffic_ops/client/cdn.go
index 1031d8a9a..008f38491 100644
--- a/traffic_ops/client/cdn.go
+++ b/traffic_ops/client/cdn.go
@@ -22,15 +22,14 @@ import (
 	"net/http"
 
 	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 )
 
 const (
-	API_v12_CDNs = "/api/1.2/cdns"
+	API_v13_CDNs = "/api/1.3/cdns"
 )
 
 // Create a CDN
-func (to *Session) CreateCDN(cdn v13.CDN) (tc.Alerts, ReqInf, error) {
+func (to *Session) CreateCDN(cdn tc.CDN) (tc.Alerts, ReqInf, error) {
 
 	var remoteAddr net.Addr
 	reqBody, err := json.Marshal(cdn)
@@ -38,7 +37,7 @@ func (to *Session) CreateCDN(cdn v13.CDN) (tc.Alerts, ReqInf, error) {
 	if err != nil {
 		return tc.Alerts{}, reqInf, err
 	}
-	resp, remoteAddr, err := to.request(http.MethodPost, API_v12_CDNs, reqBody)
+	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_CDNs, reqBody)
 	if err != nil {
 		return tc.Alerts{}, reqInf, err
 	}
@@ -49,7 +48,7 @@ func (to *Session) CreateCDN(cdn v13.CDN) (tc.Alerts, ReqInf, error) {
 }
 
 // Update a CDN by ID
-func (to *Session) UpdateCDNByID(id int, cdn v13.CDN) (tc.Alerts, ReqInf, error) {
+func (to *Session) UpdateCDNByID(id int, cdn tc.CDN) (tc.Alerts, ReqInf, error) {
 
 	var remoteAddr net.Addr
 	reqBody, err := json.Marshal(cdn)
@@ -57,7 +56,7 @@ func (to *Session) UpdateCDNByID(id int, cdn v13.CDN) (tc.Alerts, ReqInf, error)
 	if err != nil {
 		return tc.Alerts{}, reqInf, err
 	}
-	route := fmt.Sprintf("%s/%d", API_v12_CDNs, id)
+	route := fmt.Sprintf("%s/%d", API_v13_CDNs, id)
 	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
 	if err != nil {
 		return tc.Alerts{}, reqInf, err
@@ -69,22 +68,22 @@ func (to *Session) UpdateCDNByID(id int, cdn v13.CDN) (tc.Alerts, ReqInf, error)
 }
 
 // Returns a list of CDNs
-func (to *Session) GetCDNs() ([]v13.CDN, ReqInf, error) {
-	resp, remoteAddr, err := to.request(http.MethodGet, API_v12_CDNs, nil)
+func (to *Session) GetCDNs() ([]tc.CDN, ReqInf, error) {
+	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_CDNs, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
 		return nil, reqInf, err
 	}
 	defer resp.Body.Close()
 
-	var data v13.CDNsResponse
+	var data tc.CDNsResponse
 	err = json.NewDecoder(resp.Body).Decode(&data)
 	return data.Response, reqInf, nil
 }
 
-// GET a CDN by the CDN id
-func (to *Session) GetCDNByID(id int) ([]v13.CDN, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v12_CDNs, id)
+// GET a CDN by the CDN ID
+func (to *Session) GetCDNByID(id int) ([]tc.CDN, ReqInf, error) {
+	route := fmt.Sprintf("%s/%d", API_v13_CDNs, id)
 	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
@@ -92,7 +91,7 @@ func (to *Session) GetCDNByID(id int) ([]v13.CDN, ReqInf, error) {
 	}
 	defer resp.Body.Close()
 
-	var data v13.CDNsResponse
+	var data tc.CDNsResponse
 	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
 		return nil, reqInf, err
 	}
@@ -101,8 +100,8 @@ func (to *Session) GetCDNByID(id int) ([]v13.CDN, ReqInf, error) {
 }
 
 // GET a CDN by the CDN name
-func (to *Session) GetCDNByName(name string) ([]v13.CDN, ReqInf, error) {
-	url := fmt.Sprintf("%s/name/%s", API_v12_CDNs, name)
+func (to *Session) GetCDNByName(name string) ([]tc.CDN, ReqInf, error) {
+	url := fmt.Sprintf("%s?name=%s", API_v13_CDNs, name)
 	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
@@ -110,7 +109,7 @@ func (to *Session) GetCDNByName(name string) ([]v13.CDN, ReqInf, error) {
 	}
 	defer resp.Body.Close()
 
-	var data v13.CDNsResponse
+	var data tc.CDNsResponse
 	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
 		return nil, reqInf, err
 	}
@@ -120,7 +119,7 @@ func (to *Session) GetCDNByName(name string) ([]v13.CDN, ReqInf, error) {
 
 // DELETE a CDN by ID
 func (to *Session) DeleteCDNByID(id int) (tc.Alerts, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v12_CDNs, id)
+	route := fmt.Sprintf("%s/%d", API_v13_CDNs, id)
 	resp, remoteAddr, err := to.request(http.MethodDelete, route, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
@@ -132,8 +131,8 @@ func (to *Session) DeleteCDNByID(id int) (tc.Alerts, ReqInf, error) {
 	return alerts, reqInf, nil
 }
 
-func (to *Session) GetCDNSSLKeys(name string) ([]v13.CDNSSLKeys, ReqInf, error) {
-	url := fmt.Sprintf("%s/name/%s/sslkeys", API_v12_CDNs, name)
+func (to *Session) GetCDNSSLKeys(name string) ([]tc.CDNSSLKeys, ReqInf, error) {
+	url := fmt.Sprintf("%s/name/%s/sslkeys", API_v13_CDNs, name)
 	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
@@ -141,7 +140,7 @@ func (to *Session) GetCDNSSLKeys(name string) ([]v13.CDNSSLKeys, ReqInf, error)
 	}
 	defer resp.Body.Close()
 
-	var data v13.CDNSSLKeysResponse
+	var data tc.CDNSSLKeysResponse
 	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
 		return nil, reqInf, err
 	}
@@ -150,27 +149,27 @@ func (to *Session) GetCDNSSLKeys(name string) ([]v13.CDNSSLKeys, ReqInf, error)
 }
 
 // Deprecated: use GetCDNs.
-func (to *Session) CDNs() ([]v13.CDN, error) {
+func (to *Session) CDNs() ([]tc.CDN, error) {
 	cdns, _, err := to.GetCDNs()
 	return cdns, err
 }
 
 // CDNName gets an array of CDNs
 // Deprecated: use GetCDNByName
-func (to *Session) CDNName(name string) ([]v13.CDN, error) {
+func (to *Session) CDNName(name string) ([]tc.CDN, error) {
 	n, _, err := to.GetCDNByName(name)
 	return n, err
 }
 
 // CDNName gets an array of CDNs
 // Deprecated: use GetCDNByName
-func (to *Session) GetCDNName(name string) ([]v13.CDN, error) {
+func (to *Session) GetCDNName(name string) ([]tc.CDN, error) {
 	n, _, err := to.GetCDNByName(name)
 	return n, err
 }
 
 // Deprecated: use GetCDNSSLKeys
-func (to *Session) CDNSSLKeys(name string) ([]v13.CDNSSLKeys, error) {
+func (to *Session) CDNSSLKeys(name string) ([]tc.CDNSSLKeys, error) {
 	ks, _, err := to.GetCDNSSLKeys(name)
 	return ks, err
 }
diff --git a/traffic_ops/client/v13/cdn_domains.go b/traffic_ops/client/cdn_domains.go
similarity index 75%
rename from traffic_ops/client/v13/cdn_domains.go
rename to traffic_ops/client/cdn_domains.go
index 7da297fcd..5e73db9b2 100644
--- a/traffic_ops/client/v13/cdn_domains.go
+++ b/traffic_ops/client/cdn_domains.go
@@ -1,7 +1,7 @@
-package v13
+package client
 
 import (
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 )
 
 /*
@@ -19,9 +19,9 @@ import (
    limitations under the License.
 */
 
-func (to *Session) GetDomains() ([]v13.Domain, ReqInf, error) {
-	var data v13.DomainsResponse
-	inf, err := get(to, apiBase + "/cdns/domains", &data)
+func (to *Session) GetDomains() ([]tc.Domain, ReqInf, error) {
+	var data tc.DomainsResponse
+	inf, err := get(to, apiBase+"/cdns/domains", &data)
 	if err != nil {
 		return nil, inf, err
 	}
diff --git a/traffic_ops/client/v13/cdnfederations.go b/traffic_ops/client/cdnfederations.go
similarity index 72%
rename from traffic_ops/client/v13/cdnfederations.go
rename to traffic_ops/client/cdnfederations.go
index 519320422..e9f04b18f 100644
--- a/traffic_ops/client/v13/cdnfederations.go
+++ b/traffic_ops/client/cdnfederations.go
@@ -13,13 +13,13 @@
    limitations under the License.
 */
 
-package v13
+package client
 
 import (
 	"encoding/json"
 	"fmt"
 
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 )
 
 /* Internally, the CDNName is only used in the GET method. The CDNName
@@ -27,46 +27,46 @@ import (
  * `/cdns/:name/federations`. Although the behavior is odd, it is kept to
  * keep the same behavior from perl. */
 
-func (to *Session) CreateCDNFederationByName(f v13.CDNFederation, CDNName string) (*v13.CreateCDNFederationResponse, ReqInf, error) {
+func (to *Session) CreateCDNFederationByName(f tc.CDNFederation, CDNName string) (*tc.CreateCDNFederationResponse, ReqInf, error) {
 	jsonReq, err := json.Marshal(f)
 	if err != nil { //There is no remoteAddr for ReqInf at this point
 		return nil, ReqInf{CacheHitStatus: CacheHitStatusMiss}, err
 	}
 
-	data := v13.CreateCDNFederationResponse{}
+	data := tc.CreateCDNFederationResponse{}
 	url := fmt.Sprintf("%s/cdns/%s/federations", apiBase, CDNName)
 	inf, err := makeReq(to, "POST", url, jsonReq, &data)
 	return &data, inf, err
 }
 
-func (to *Session) GetCDNFederationsByName(CDNName string) (*v13.CDNFederationResponse, ReqInf, error) {
-	data := v13.CDNFederationResponse{}
+func (to *Session) GetCDNFederationsByName(CDNName string) (*tc.CDNFederationResponse, ReqInf, error) {
+	data := tc.CDNFederationResponse{}
 	url := fmt.Sprintf("%s/cdns/%s/federations", apiBase, CDNName)
 	inf, err := get(to, url, &data)
 	return &data, inf, err
 }
 
-func (to *Session) GetCDNFederationsByID(CDNName string, ID int) (*v13.CDNFederationResponse, ReqInf, error) {
-	data := v13.CDNFederationResponse{}
+func (to *Session) GetCDNFederationsByID(CDNName string, ID int) (*tc.CDNFederationResponse, ReqInf, error) {
+	data := tc.CDNFederationResponse{}
 	url := fmt.Sprintf("%s/cdns/%s/federations/%d", apiBase, CDNName, ID)
 	inf, err := get(to, url, &data)
 	return &data, inf, err
 }
 
-func (to *Session) UpdateCDNFederationsByID(f v13.CDNFederation, CDNName string, ID int) (*v13.UpdateCDNFederationResponse, ReqInf, error) {
+func (to *Session) UpdateCDNFederationsByID(f tc.CDNFederation, CDNName string, ID int) (*tc.UpdateCDNFederationResponse, ReqInf, error) {
 	jsonReq, err := json.Marshal(f)
 	if err != nil { //There is no remoteAddr for ReqInf at this point
 		return nil, ReqInf{CacheHitStatus: CacheHitStatusMiss}, err
 	}
 
-	data := v13.UpdateCDNFederationResponse{}
+	data := tc.UpdateCDNFederationResponse{}
 	url := fmt.Sprintf("%s/cdns/%s/federations/%d", apiBase, CDNName, ID)
 	inf, err := makeReq(to, "PUT", url, jsonReq, &data)
 	return &data, inf, err
 }
 
-func (to *Session) DeleteCDNFederationByID(CDNName string, ID int) (*v13.DeleteCDNFederationResponse, ReqInf, error) {
-	data := v13.DeleteCDNFederationResponse{}
+func (to *Session) DeleteCDNFederationByID(CDNName string, ID int) (*tc.DeleteCDNFederationResponse, ReqInf, error) {
+	data := tc.DeleteCDNFederationResponse{}
 	url := fmt.Sprintf("%s/cdns/%s/federations/%d", apiBase, CDNName, ID)
 	inf, err := makeReq(to, "DELETE", url, nil, &data)
 	return &data, inf, err
diff --git a/traffic_ops/client/v13/coordinate.go b/traffic_ops/client/coordinate.go
similarity index 75%
rename from traffic_ops/client/v13/coordinate.go
rename to traffic_ops/client/coordinate.go
index c59eeff67..57b051c15 100644
--- a/traffic_ops/client/v13/coordinate.go
+++ b/traffic_ops/client/coordinate.go
@@ -13,7 +13,7 @@
    limitations under the License.
 */
 
-package v13
+package client
 
 import (
 	"encoding/json"
@@ -22,15 +22,14 @@ import (
 	"net/http"
 
 	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 )
 
 const (
-	API_v13_Coordinates = "/api/1.3/coordinates"
+	API_V13_Coordinates = "/api/1.3/coordinates"
 )
 
 // Create a Coordinate
-func (to *Session) CreateCoordinate(coordinate v13.Coordinate) (tc.Alerts, ReqInf, error) {
+func (to *Session) CreateCoordinate(coordinate tc.Coordinate) (tc.Alerts, ReqInf, error) {
 
 	var remoteAddr net.Addr
 	reqBody, err := json.Marshal(coordinate)
@@ -38,7 +37,7 @@ func (to *Session) CreateCoordinate(coordinate v13.Coordinate) (tc.Alerts, ReqIn
 	if err != nil {
 		return tc.Alerts{}, reqInf, err
 	}
-	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_Coordinates, reqBody)
+	resp, remoteAddr, err := to.request(http.MethodPost, API_V13_Coordinates, reqBody)
 	if err != nil {
 		return tc.Alerts{}, reqInf, err
 	}
@@ -49,7 +48,7 @@ func (to *Session) CreateCoordinate(coordinate v13.Coordinate) (tc.Alerts, ReqIn
 }
 
 // Update a Coordinate by ID
-func (to *Session) UpdateCoordinateByID(id int, coordinate v13.Coordinate) (tc.Alerts, ReqInf, error) {
+func (to *Session) UpdateCoordinateByID(id int, coordinate tc.Coordinate) (tc.Alerts, ReqInf, error) {
 
 	var remoteAddr net.Addr
 	reqBody, err := json.Marshal(coordinate)
@@ -57,7 +56,7 @@ func (to *Session) UpdateCoordinateByID(id int, coordinate v13.Coordinate) (tc.A
 	if err != nil {
 		return tc.Alerts{}, reqInf, err
 	}
-	route := fmt.Sprintf("%s?id=%d", API_v13_Coordinates, id)
+	route := fmt.Sprintf("%s?id=%d", API_V13_Coordinates, id)
 	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
 	if err != nil {
 		return tc.Alerts{}, reqInf, err
@@ -69,22 +68,22 @@ func (to *Session) UpdateCoordinateByID(id int, coordinate v13.Coordinate) (tc.A
 }
 
 // Returns a list of Coordinates
-func (to *Session) GetCoordinates() ([]v13.Coordinate, ReqInf, error) {
-	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_Coordinates, nil)
+func (to *Session) GetCoordinates() ([]tc.Coordinate, ReqInf, error) {
+	resp, remoteAddr, err := to.request(http.MethodGet, API_V13_Coordinates, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
 		return nil, reqInf, err
 	}
 	defer resp.Body.Close()
 
-	var data v13.CoordinatesResponse
+	var data tc.CoordinatesResponse
 	err = json.NewDecoder(resp.Body).Decode(&data)
 	return data.Response, reqInf, nil
 }
 
 // GET a Coordinate by the Coordinate id
-func (to *Session) GetCoordinateByID(id int) ([]v13.Coordinate, ReqInf, error) {
-	route := fmt.Sprintf("%s?id=%d", API_v13_Coordinates, id)
+func (to *Session) GetCoordinateByID(id int) ([]tc.Coordinate, ReqInf, error) {
+	route := fmt.Sprintf("%s?id=%d", API_V13_Coordinates, id)
 	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
@@ -92,7 +91,7 @@ func (to *Session) GetCoordinateByID(id int) ([]v13.Coordinate, ReqInf, error) {
 	}
 	defer resp.Body.Close()
 
-	var data v13.CoordinatesResponse
+	var data tc.CoordinatesResponse
 	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
 		return nil, reqInf, err
 	}
@@ -101,8 +100,8 @@ func (to *Session) GetCoordinateByID(id int) ([]v13.Coordinate, ReqInf, error) {
 }
 
 // GET a Coordinate by the Coordinate name
-func (to *Session) GetCoordinateByName(name string) ([]v13.Coordinate, ReqInf, error) {
-	url := fmt.Sprintf("%s?name=%s", API_v13_Coordinates, name)
+func (to *Session) GetCoordinateByName(name string) ([]tc.Coordinate, ReqInf, error) {
+	url := fmt.Sprintf("%s?name=%s", API_V13_Coordinates, name)
 	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
@@ -110,7 +109,7 @@ func (to *Session) GetCoordinateByName(name string) ([]v13.Coordinate, ReqInf, e
 	}
 	defer resp.Body.Close()
 
-	var data v13.CoordinatesResponse
+	var data tc.CoordinatesResponse
 	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
 		return nil, reqInf, err
 	}
@@ -120,7 +119,7 @@ func (to *Session) GetCoordinateByName(name string) ([]v13.Coordinate, ReqInf, e
 
 // DELETE a Coordinate by ID
 func (to *Session) DeleteCoordinateByID(id int) (tc.Alerts, ReqInf, error) {
-	route := fmt.Sprintf("%s?id=%d", API_v13_Coordinates, id)
+	route := fmt.Sprintf("%s?id=%d", API_V13_Coordinates, id)
 	resp, remoteAddr, err := to.request(http.MethodDelete, route, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
diff --git a/traffic_ops/client/deliveryservice.go b/traffic_ops/client/deliveryservice.go
index 413c31ae8..bfa5d742b 100644
--- a/traffic_ops/client/deliveryservice.go
+++ b/traffic_ops/client/deliveryservice.go
@@ -19,7 +19,7 @@ import (
 	"encoding/json"
 	"strconv"
 
-	tc "github.com/apache/trafficcontrol/lib/go-tc"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 )
 
 // DeliveryServices gets an array of DeliveryServices
@@ -30,7 +30,7 @@ func (to *Session) DeliveryServices() ([]tc.DeliveryService, error) {
 }
 
 func (to *Session) GetDeliveryServices() ([]tc.DeliveryService, ReqInf, error) {
-	var data tc.GetDeliveryServiceResponse
+	var data tc.DeliveryServicesResponse
 	reqInf, err := get(to, deliveryServicesEp(), &data)
 	if err != nil {
 		return nil, reqInf, err
@@ -47,7 +47,7 @@ func (to *Session) DeliveryServicesByServer(id int) ([]tc.DeliveryService, error
 }
 
 func (to *Session) GetDeliveryServicesByServer(id int) ([]tc.DeliveryService, ReqInf, error) {
-	var data tc.GetDeliveryServiceResponse
+	var data tc.DeliveryServicesResponse
 	reqInf, err := get(to, deliveryServicesByServerEp(strconv.Itoa(id)), &data)
 	if err != nil {
 		return nil, reqInf, err
@@ -56,6 +56,16 @@ func (to *Session) GetDeliveryServicesByServer(id int) ([]tc.DeliveryService, Re
 	return data.Response, reqInf, nil
 }
 
+func (to *Session) GetDeliveryServiceByXMLID(XMLID string) ([]tc.DeliveryService, ReqInf, error) {
+	var data tc.GetDeliveryServiceResponse
+	reqInf, err := get(to, deliveryServicesByXMLID(XMLID), &data)
+	if err != nil {
+		return nil, reqInf, err
+	}
+
+	return data.Response, reqInf, nil
+}
+
 // DeliveryService gets the DeliveryService for the ID it's passed
 // Deprecated: use GetDeliveryService
 func (to *Session) DeliveryService(id string) (*tc.DeliveryService, error) {
@@ -64,12 +74,14 @@ func (to *Session) DeliveryService(id string) (*tc.DeliveryService, error) {
 }
 
 func (to *Session) GetDeliveryService(id string) (*tc.DeliveryService, ReqInf, error) {
-	var data tc.GetDeliveryServiceResponse
+	var data tc.DeliveryServicesResponse
 	reqInf, err := get(to, deliveryServiceEp(id), &data)
 	if err != nil {
 		return nil, reqInf, err
 	}
-
+	if len(data.Response) == 0 {
+		return nil, reqInf, nil
+	}
 	return &data.Response[0], reqInf, nil
 }
 
@@ -259,3 +271,15 @@ func (to *Session) GetDeliveryServiceMatches() ([]tc.DeliveryServicePatterns, Re
 	}
 	return resp.Response, reqInf, nil
 }
+
+func (to *Session) GetDeliveryServicesEligible(dsID int) ([]tc.DSServer, ReqInf, error) {
+	resp := struct {
+		Response []tc.DSServer `json:"response"`
+	}{Response: []tc.DSServer{}}
+	uri := apiBase + `/deliveryservices/` + strconv.Itoa(dsID) + `/servers/eligible`
+	reqInf, err := get(to, uri, &resp)
+	if err != nil {
+		return nil, reqInf, err
+	}
+	return resp.Response, reqInf, nil
+}
diff --git a/traffic_ops/client/deliveryservice_endpoints.go b/traffic_ops/client/deliveryservice_endpoints.go
index 53f335274..32eb1d729 100644
--- a/traffic_ops/client/deliveryservice_endpoints.go
+++ b/traffic_ops/client/deliveryservice_endpoints.go
@@ -64,3 +64,7 @@ func deliveryServiceSSLKeysByIDEp(id string) string {
 func deliveryServiceSSLKeysByHostnameEp(hostname string) string {
 	return apiBase + dsPath + "/hostname/" + hostname + "/sslkeys.json"
 }
+
+func deliveryServicesByXMLID(XMLID string) string {
+	return apiBase + dsPath + "?xmlId=" + XMLID
+}
diff --git a/traffic_ops/client/v13/deliveryservice_request_comments.go b/traffic_ops/client/deliveryservice_request_comments.go
similarity index 99%
rename from traffic_ops/client/v13/deliveryservice_request_comments.go
rename to traffic_ops/client/deliveryservice_request_comments.go
index 57c6ecb6a..b19dbde7d 100644
--- a/traffic_ops/client/v13/deliveryservice_request_comments.go
+++ b/traffic_ops/client/deliveryservice_request_comments.go
@@ -13,7 +13,7 @@
    limitations under the License.
 */
 
-package v13
+package client
 
 import (
 	"encoding/json"
diff --git a/traffic_ops/client/v13/deliveryservice_requests.go b/traffic_ops/client/deliveryservice_requests.go
similarity index 99%
rename from traffic_ops/client/v13/deliveryservice_requests.go
rename to traffic_ops/client/deliveryservice_requests.go
index 08b96bec7..e8d543b41 100644
--- a/traffic_ops/client/v13/deliveryservice_requests.go
+++ b/traffic_ops/client/deliveryservice_requests.go
@@ -13,7 +13,7 @@
    limitations under the License.
 */
 
-package v13
+package client
 
 import (
 	"encoding/json"
diff --git a/traffic_ops/client/v13/deliveryserviceserver.go b/traffic_ops/client/deliveryserviceserver.go
similarity index 99%
rename from traffic_ops/client/v13/deliveryserviceserver.go
rename to traffic_ops/client/deliveryserviceserver.go
index 75ef91222..7f30d9bf9 100644
--- a/traffic_ops/client/v13/deliveryserviceserver.go
+++ b/traffic_ops/client/deliveryserviceserver.go
@@ -13,7 +13,7 @@
    limitations under the License.
 */
 
-package v13
+package client
 
 import (
 	"encoding/json"
diff --git a/traffic_ops/client/v13/division.go b/traffic_ops/client/division.go
similarity index 99%
rename from traffic_ops/client/v13/division.go
rename to traffic_ops/client/division.go
index 8f18fb1f0..04f61cdea 100644
--- a/traffic_ops/client/v13/division.go
+++ b/traffic_ops/client/division.go
@@ -13,7 +13,7 @@
    limitations under the License.
 */
 
-package v13
+package client
 
 import (
 	"encoding/json"
diff --git a/traffic_ops/client/dsuser.go b/traffic_ops/client/dsuser.go
index 1a5a184ab..f39137b80 100644
--- a/traffic_ops/client/dsuser.go
+++ b/traffic_ops/client/dsuser.go
@@ -23,9 +23,9 @@ import (
 )
 
 // GetUserDeliveryServices gets the delivery services associated with the given user.
-func (to *Session) GetUserDeliveryServices(userID int) (*tc.UserDeliveryServicesResponse, ReqInf, error) {
+func (to *Session) GetUserDeliveryServices(userID int) (*tc.UserDeliveryServicesNullableResponse, ReqInf, error) {
 	uri := apiBase + `/users/` + strconv.Itoa(userID) + `/deliveryservices`
-	resp := tc.UserDeliveryServicesResponse{}
+	resp := tc.UserDeliveryServicesNullableResponse{}
 	reqInf, err := get(to, uri, &resp)
 	if err != nil {
 		return nil, reqInf, err
diff --git a/traffic_ops/client/endpoints.go b/traffic_ops/client/endpoints.go
index 0b8f7ed36..2891c3225 100644
--- a/traffic_ops/client/endpoints.go
+++ b/traffic_ops/client/endpoints.go
@@ -15,4 +15,4 @@
 
 package client
 
-const apiBase = "/api/1.2"
+const apiBase = "/api/1.3"
diff --git a/traffic_ops/client/v13/origin.go b/traffic_ops/client/origin.go
similarity index 81%
rename from traffic_ops/client/v13/origin.go
rename to traffic_ops/client/origin.go
index fc83a4690..d76ab5cc3 100644
--- a/traffic_ops/client/v13/origin.go
+++ b/traffic_ops/client/origin.go
@@ -13,7 +13,7 @@
    limitations under the License.
 */
 
-package v13
+package client
 
 import (
 	"encoding/json"
@@ -22,7 +22,6 @@ import (
 	"net/http"
 
 	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 )
 
 const (
@@ -30,7 +29,7 @@ const (
 )
 
 // Create an Origin
-func (to *Session) CreateOrigin(origin v13.Origin) (*v13.OriginDetailResponse, ReqInf, error) {
+func (to *Session) CreateOrigin(origin tc.Origin) (*tc.OriginDetailResponse, ReqInf, error) {
 
 	var remoteAddr net.Addr
 	reqBody, err := json.Marshal(origin)
@@ -43,7 +42,7 @@ func (to *Session) CreateOrigin(origin v13.Origin) (*v13.OriginDetailResponse, R
 		return nil, reqInf, err
 	}
 	defer resp.Body.Close()
-	var originResp v13.OriginDetailResponse
+	var originResp tc.OriginDetailResponse
 	if err = json.NewDecoder(resp.Body).Decode(&originResp); err != nil {
 		return nil, reqInf, err
 	}
@@ -51,7 +50,7 @@ func (to *Session) CreateOrigin(origin v13.Origin) (*v13.OriginDetailResponse, R
 }
 
 // Update an Origin by ID
-func (to *Session) UpdateOriginByID(id int, origin v13.Origin) (*v13.OriginDetailResponse, ReqInf, error) {
+func (to *Session) UpdateOriginByID(id int, origin tc.Origin) (*tc.OriginDetailResponse, ReqInf, error) {
 
 	var remoteAddr net.Addr
 	reqBody, err := json.Marshal(origin)
@@ -65,7 +64,7 @@ func (to *Session) UpdateOriginByID(id int, origin v13.Origin) (*v13.OriginDetai
 		return nil, reqInf, err
 	}
 	defer resp.Body.Close()
-	var originResp v13.OriginDetailResponse
+	var originResp tc.OriginDetailResponse
 	if err = json.NewDecoder(resp.Body).Decode(&originResp); err != nil {
 		return nil, reqInf, err
 	}
@@ -73,7 +72,7 @@ func (to *Session) UpdateOriginByID(id int, origin v13.Origin) (*v13.OriginDetai
 }
 
 // GET a list of Origins by a query parameter string
-func (to *Session) GetOriginsByQueryParams(queryParams string) ([]v13.Origin, ReqInf, error) {
+func (to *Session) GetOriginsByQueryParams(queryParams string) ([]tc.Origin, ReqInf, error) {
 	URI := API_v13_Origins + queryParams
 	resp, remoteAddr, err := to.request(http.MethodGet, URI, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
@@ -82,7 +81,7 @@ func (to *Session) GetOriginsByQueryParams(queryParams string) ([]v13.Origin, Re
 	}
 	defer resp.Body.Close()
 
-	var data v13.OriginsResponse
+	var data tc.OriginsResponse
 	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
 		return nil, reqInf, err
 	}
@@ -91,22 +90,22 @@ func (to *Session) GetOriginsByQueryParams(queryParams string) ([]v13.Origin, Re
 }
 
 // Returns a list of Origins
-func (to *Session) GetOrigins() ([]v13.Origin, ReqInf, error) {
+func (to *Session) GetOrigins() ([]tc.Origin, ReqInf, error) {
 	return to.GetOriginsByQueryParams("")
 }
 
 // GET an Origin by the Origin ID
-func (to *Session) GetOriginByID(id int) ([]v13.Origin, ReqInf, error) {
+func (to *Session) GetOriginByID(id int) ([]tc.Origin, ReqInf, error) {
 	return to.GetOriginsByQueryParams(fmt.Sprintf("?id=%d", id))
 }
 
 // GET an Origin by the Origin name
-func (to *Session) GetOriginByName(name string) ([]v13.Origin, ReqInf, error) {
+func (to *Session) GetOriginByName(name string) ([]tc.Origin, ReqInf, error) {
 	return to.GetOriginsByQueryParams(fmt.Sprintf("?name=%s", name))
 }
 
 // GET a list of Origins by Delivery Service ID
-func (to *Session) GetOriginsByDeliveryServiceID(id int) ([]v13.Origin, ReqInf, error) {
+func (to *Session) GetOriginsByDeliveryServiceID(id int) ([]tc.Origin, ReqInf, error) {
 	return to.GetOriginsByQueryParams(fmt.Sprintf("?deliveryservice=%d", id))
 }
 
diff --git a/traffic_ops/client/parameter.go b/traffic_ops/client/parameter.go
index bdc5d3dc3..f5706cd55 100644
--- a/traffic_ops/client/parameter.go
+++ b/traffic_ops/client/parameter.go
@@ -18,20 +18,134 @@ package client
 import (
 	"encoding/json"
 	"fmt"
+	"net"
+	"net/http"
+	"net/url"
 
-	tc "github.com/apache/trafficcontrol/lib/go-tc"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 )
 
+const (
+	API_v13_Parameters = "/api/1.3/parameters"
+)
+
+// Create a Parameter
+func (to *Session) CreateParameter(pl tc.Parameter) (tc.Alerts, ReqInf, error) {
+
+	var remoteAddr net.Addr
+	reqBody, err := json.Marshal(pl)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_Parameters, reqBody)
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	defer resp.Body.Close()
+	var alerts tc.Alerts
+	err = json.NewDecoder(resp.Body).Decode(&alerts)
+	return alerts, reqInf, nil
+}
+
+// Update a Parameter by ID
+func (to *Session) UpdateParameterByID(id int, pl tc.Parameter) (tc.Alerts, ReqInf, error) {
+
+	var remoteAddr net.Addr
+	reqBody, err := json.Marshal(pl)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	route := fmt.Sprintf("%s/%d", API_v13_Parameters, id)
+	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	defer resp.Body.Close()
+	var alerts tc.Alerts
+	err = json.NewDecoder(resp.Body).Decode(&alerts)
+	return alerts, reqInf, nil
+}
+
+// Returns a list of Parameters
+func (to *Session) GetParameters() ([]tc.Parameter, ReqInf, error) {
+	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_Parameters, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.ParametersResponse
+	err = json.NewDecoder(resp.Body).Decode(&data)
+	return data.Response, reqInf, nil
+}
+
 // Parameters gets an array of parameter structs for the profile given
 // Deprecated: use GetParameters
 func (to *Session) Parameters(profileName string) ([]tc.Parameter, error) {
-	ps, _, err := to.GetParameters(profileName)
+	ps, _, err := to.GetParametersByProfileName(profileName)
 	return ps, err
 }
 
-func (to *Session) GetParameters(profileName string) ([]tc.Parameter, ReqInf, error) {
-	url := fmt.Sprintf("/api/1.2/parameters/profile/%s.json", profileName)
-	resp, remoteAddr, err := to.request("GET", url, nil)
+func (to *Session) GetParametersByProfileName(profileName string) ([]tc.Parameter, ReqInf, error) {
+	url := fmt.Sprintf(API_v13_Parameters+"/profile/%s.json", profileName)
+	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.ParametersResponse
+	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
+		return nil, reqInf, err
+	}
+
+	return data.Response, reqInf, nil
+}
+
+// GET a Parameter by the Parameter ID
+func (to *Session) GetParameterByID(id int) ([]tc.Parameter, ReqInf, error) {
+	route := fmt.Sprintf("%s/%d", API_v13_Parameters, id)
+	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.ParametersResponse
+	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
+		return nil, reqInf, err
+	}
+
+	return data.Response, reqInf, nil
+}
+
+// GET a Parameter by the Parameter name
+func (to *Session) GetParameterByName(name string) ([]tc.Parameter, ReqInf, error) {
+	URI := API_v13_Parameters + "?name=" + url.QueryEscape(name)
+	resp, remoteAddr, err := to.request(http.MethodGet, URI, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.ParametersResponse
+	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
+		return nil, reqInf, err
+	}
+
+	return data.Response, reqInf, nil
+}
+
+// GET a Parameter by the Parameter ConfigFile
+func (to *Session) GetParameterByConfigFile(configFile string) ([]tc.Parameter, ReqInf, error) {
+	URI := API_v13_Parameters + "?configFile=" + url.QueryEscape(configFile)
+	resp, remoteAddr, err := to.request(http.MethodGet, URI, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
 		return nil, reqInf, err
@@ -45,3 +159,35 @@ func (to *Session) GetParameters(profileName string) ([]tc.Parameter, ReqInf, er
 
 	return data.Response, reqInf, nil
 }
+
+// GET a Parameter by the Parameter Name and ConfigFile
+func (to *Session) GetParameterByNameAndConfigFile(name string, configFile string) ([]tc.Parameter, ReqInf, error) {
+	URI := fmt.Sprintf("%s?name=%s&configFile=%s", API_v13_Parameters, url.QueryEscape(name), url.QueryEscape(configFile))
+	resp, remoteAddr, err := to.request(http.MethodGet, URI, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.ParametersResponse
+	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
+		return nil, reqInf, err
+	}
+
+	return data.Response, reqInf, nil
+}
+
+// DELETE a Parameter by ID
+func (to *Session) DeleteParameterByID(id int) (tc.Alerts, ReqInf, error) {
+	URI := fmt.Sprintf("%s/%d", API_v13_Parameters, id)
+	resp, remoteAddr, err := to.request(http.MethodDelete, URI, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	defer resp.Body.Close()
+	var alerts tc.Alerts
+	err = json.NewDecoder(resp.Body).Decode(&alerts)
+	return alerts, reqInf, nil
+}
diff --git a/traffic_ops/client/phys_location.go b/traffic_ops/client/phys_location.go
index e15a467e3..b1f3f11b8 100644
--- a/traffic_ops/client/phys_location.go
+++ b/traffic_ops/client/phys_location.go
@@ -25,19 +25,19 @@ import (
 )
 
 const (
-	API_v13_PHYS_LOCATIONS = "/api/1.3/phys_locations"
+	API_v13_PhysLocations = "/api/1.3/phys_locations"
 )
 
 // Create a PhysLocation
-func (to *Session) CreatePhysLocation(physLocation tc.PhysLocation) (tc.Alerts, ReqInf, error) {
+func (to *Session) CreatePhysLocation(pl tc.PhysLocation) (tc.Alerts, ReqInf, error) {
 
 	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(physLocation)
+	reqBody, err := json.Marshal(pl)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
 		return tc.Alerts{}, reqInf, err
 	}
-	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_PHYS_LOCATIONS, reqBody)
+	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_PhysLocations, reqBody)
 	if err != nil {
 		return tc.Alerts{}, reqInf, err
 	}
@@ -48,15 +48,15 @@ func (to *Session) CreatePhysLocation(physLocation tc.PhysLocation) (tc.Alerts,
 }
 
 // Update a PhysLocation by ID
-func (to *Session) UpdatePhysLocationByID(id int, physLocation tc.PhysLocation) (tc.Alerts, ReqInf, error) {
+func (to *Session) UpdatePhysLocationByID(id int, pl tc.PhysLocation) (tc.Alerts, ReqInf, error) {
 
 	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(physLocation)
+	reqBody, err := json.Marshal(pl)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
 		return tc.Alerts{}, reqInf, err
 	}
-	route := fmt.Sprintf("%s/%d", API_v13_PHYS_LOCATIONS, id)
+	route := fmt.Sprintf("%s/%d", API_v13_PhysLocations, id)
 	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
 	if err != nil {
 		return tc.Alerts{}, reqInf, err
@@ -67,9 +67,9 @@ func (to *Session) UpdatePhysLocationByID(id int, physLocation tc.PhysLocation)
 	return alerts, reqInf, nil
 }
 
-// Returns a list of physLocations
+// Returns a list of PhysLocations
 func (to *Session) GetPhysLocations() ([]tc.PhysLocation, ReqInf, error) {
-	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_PHYS_LOCATIONS, nil)
+	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_PhysLocations, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
 		return nil, reqInf, err
@@ -81,9 +81,9 @@ func (to *Session) GetPhysLocations() ([]tc.PhysLocation, ReqInf, error) {
 	return data.Response, reqInf, nil
 }
 
-// GET a PhysLocation by the PhysLocation id
+// GET a PhysLocation by the PhysLocation ID
 func (to *Session) GetPhysLocationByID(id int) ([]tc.PhysLocation, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v13_PHYS_LOCATIONS, id)
+	route := fmt.Sprintf("%s/%d", API_v13_PhysLocations, id)
 	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
@@ -101,7 +101,7 @@ func (to *Session) GetPhysLocationByID(id int) ([]tc.PhysLocation, ReqInf, error
 
 // GET a PhysLocation by the PhysLocation name
 func (to *Session) GetPhysLocationByName(name string) ([]tc.PhysLocation, ReqInf, error) {
-	url := fmt.Sprintf("%s?name=%s", API_v13_PHYS_LOCATIONS, name)
+	url := fmt.Sprintf("%s?name=%s", API_v13_PhysLocations, name)
 	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
@@ -119,7 +119,7 @@ func (to *Session) GetPhysLocationByName(name string) ([]tc.PhysLocation, ReqInf
 
 // DELETE a PhysLocation by ID
 func (to *Session) DeletePhysLocationByID(id int) (tc.Alerts, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v13_PHYS_LOCATIONS, id)
+	route := fmt.Sprintf("%s/%d", API_v13_PhysLocations, id)
 	resp, remoteAddr, err := to.request(http.MethodDelete, route, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
diff --git a/traffic_ops/client/v13/ping.go b/traffic_ops/client/ping.go
similarity index 98%
rename from traffic_ops/client/v13/ping.go
rename to traffic_ops/client/ping.go
index b718d00d3..6169c66b9 100644
--- a/traffic_ops/client/v13/ping.go
+++ b/traffic_ops/client/ping.go
@@ -13,7 +13,7 @@
    limitations under the License.
 */
 
-package v13
+package client
 
 import (
 	"encoding/json"
diff --git a/traffic_ops/client/profile.go b/traffic_ops/client/profile.go
index 28af6059f..5d8379818 100644
--- a/traffic_ops/client/profile.go
+++ b/traffic_ops/client/profile.go
@@ -17,10 +17,58 @@ package client
 
 import (
 	"encoding/json"
+	"fmt"
+	"net"
+	"net/http"
+	"net/url"
+	"strconv"
 
-	tc "github.com/apache/trafficcontrol/lib/go-tc"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 )
 
+const (
+	API_v13_Profiles = "/api/1.3/profiles"
+)
+
+// Create a Profile
+func (to *Session) CreateProfile(pl tc.Profile) (tc.Alerts, ReqInf, error) {
+
+	var remoteAddr net.Addr
+	reqBody, err := json.Marshal(pl)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_Profiles, reqBody)
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	defer resp.Body.Close()
+	var alerts tc.Alerts
+	err = json.NewDecoder(resp.Body).Decode(&alerts)
+	return alerts, reqInf, nil
+}
+
+// Update a Profile by ID
+func (to *Session) UpdateProfileByID(id int, pl tc.Profile) (tc.Alerts, ReqInf, error) {
+
+	var remoteAddr net.Addr
+	reqBody, err := json.Marshal(pl)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	route := fmt.Sprintf("%s/%d", API_v13_Profiles, id)
+	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	defer resp.Body.Close()
+	var alerts tc.Alerts
+	err = json.NewDecoder(resp.Body).Decode(&alerts)
+	return alerts, reqInf, nil
+}
+
 // Profiles gets an array of Profiles
 // Deprecated: use GetProfiles
 func (to *Session) Profiles() ([]tc.Profile, error) {
@@ -28,9 +76,60 @@ func (to *Session) Profiles() ([]tc.Profile, error) {
 	return ps, err
 }
 
+// Returns a list of Profiles
 func (to *Session) GetProfiles() ([]tc.Profile, ReqInf, error) {
-	url := "/api/1.2/profiles.json"
-	resp, remoteAddr, err := to.request("GET", url, nil)
+	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_Profiles, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.ProfilesResponse
+	err = json.NewDecoder(resp.Body).Decode(&data)
+	return data.Response, reqInf, nil
+}
+
+// GET a Profile by the Profile ID
+func (to *Session) GetProfileByID(id int) ([]tc.Profile, ReqInf, error) {
+	route := fmt.Sprintf("%s/%d", API_v13_Profiles, id)
+	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.ProfilesResponse
+	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
+		return nil, reqInf, err
+	}
+
+	return data.Response, reqInf, nil
+}
+
+// GET a Profile by the Profile name
+func (to *Session) GetProfileByName(name string) ([]tc.Profile, ReqInf, error) {
+	URI := API_v13_Profiles + "?name=" + url.QueryEscape(name)
+	resp, remoteAddr, err := to.request(http.MethodGet, URI, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.ProfilesResponse
+	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
+		return nil, reqInf, err
+	}
+
+	return data.Response, reqInf, nil
+}
+
+// GET a Profile by the Profile "param"
+func (to *Session) GetProfileByParameter(param string) ([]tc.Profile, ReqInf, error) {
+	URI := API_v13_Profiles + "?param=" + url.QueryEscape(param)
+	resp, remoteAddr, err := to.request(http.MethodGet, URI, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
 		return nil, reqInf, err
@@ -44,3 +143,35 @@ func (to *Session) GetProfiles() ([]tc.Profile, ReqInf, error) {
 
 	return data.Response, reqInf, nil
 }
+
+// GET a Profile by the Profile cdn id
+func (to *Session) GetProfileByCDNID(cdnID int) ([]tc.Profile, ReqInf, error) {
+	URI := API_v13_Profiles + "?cdn=" + strconv.Itoa(cdnID)
+	resp, remoteAddr, err := to.request(http.MethodGet, URI, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.ProfilesResponse
+	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
+		return nil, reqInf, err
+	}
+
+	return data.Response, reqInf, nil
+}
+
+// DELETE a Profile by ID
+func (to *Session) DeleteProfileByID(id int) (tc.Alerts, ReqInf, error) {
+	URI := fmt.Sprintf("%s/%d", API_v13_Profiles, id)
+	resp, remoteAddr, err := to.request(http.MethodDelete, URI, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	defer resp.Body.Close()
+	var alerts tc.Alerts
+	err = json.NewDecoder(resp.Body).Decode(&alerts)
+	return alerts, reqInf, nil
+}
diff --git a/traffic_ops/client/v13/profile_parameter.go b/traffic_ops/client/profile_parameter.go
similarity index 88%
rename from traffic_ops/client/v13/profile_parameter.go
rename to traffic_ops/client/profile_parameter.go
index 021a479b1..69cda7834 100644
--- a/traffic_ops/client/v13/profile_parameter.go
+++ b/traffic_ops/client/profile_parameter.go
@@ -13,7 +13,7 @@
    limitations under the License.
 */
 
-package v13
+package client
 
 import (
 	"encoding/json"
@@ -22,7 +22,6 @@ import (
 	"net/http"
 
 	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 )
 
 const (
@@ -32,7 +31,7 @@ const (
 )
 
 // Create a ProfileParameter
-func (to *Session) CreateProfileParameter(pp v13.ProfileParameter) (tc.Alerts, ReqInf, error) {
+func (to *Session) CreateProfileParameter(pp tc.ProfileParameter) (tc.Alerts, ReqInf, error) {
 
 	var remoteAddr net.Addr
 	reqBody, err := json.Marshal(pp)
@@ -51,7 +50,7 @@ func (to *Session) CreateProfileParameter(pp v13.ProfileParameter) (tc.Alerts, R
 }
 
 // Returns a list of Profile Parameters
-func (to *Session) GetProfileParameters() ([]v13.ProfileParameter, ReqInf, error) {
+func (to *Session) GetProfileParameters() ([]tc.ProfileParameter, ReqInf, error) {
 	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_Profile_Parameters, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
@@ -59,13 +58,13 @@ func (to *Session) GetProfileParameters() ([]v13.ProfileParameter, ReqInf, error
 	}
 	defer resp.Body.Close()
 
-	var data v13.ProfileParametersResponse
+	var data tc.ProfileParametersResponse
 	err = json.NewDecoder(resp.Body).Decode(&data)
 	return data.Response, reqInf, nil
 }
 
 // GET a Profile Parameter by the Parameter
-func (to *Session) GetProfileParameterByQueryParams(queryParams string) ([]v13.ProfileParameter, ReqInf, error) {
+func (to *Session) GetProfileParameterByQueryParams(queryParams string) ([]tc.ProfileParameter, ReqInf, error) {
 	URI := API_v13_Profile_Parameters + queryParams
 	resp, remoteAddr, err := to.request(http.MethodGet, URI, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
@@ -74,7 +73,7 @@ func (to *Session) GetProfileParameterByQueryParams(queryParams string) ([]v13.P
 	}
 	defer resp.Body.Close()
 
-	var data v13.ProfileParametersResponse
+	var data tc.ProfileParametersResponse
 	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
 		return nil, reqInf, err
 	}
diff --git a/traffic_ops/client/v13/region.go b/traffic_ops/client/region.go
similarity index 99%
rename from traffic_ops/client/v13/region.go
rename to traffic_ops/client/region.go
index fb71e784c..74d04a36c 100644
--- a/traffic_ops/client/v13/region.go
+++ b/traffic_ops/client/region.go
@@ -13,7 +13,7 @@
    limitations under the License.
 */
 
-package v13
+package client
 
 import (
 	"encoding/json"
diff --git a/traffic_ops/client/v13/role.go b/traffic_ops/client/role.go
similarity index 85%
rename from traffic_ops/client/v13/role.go
rename to traffic_ops/client/role.go
index 506955daa..d403cfc61 100644
--- a/traffic_ops/client/v13/role.go
+++ b/traffic_ops/client/role.go
@@ -13,7 +13,7 @@
    limitations under the License.
 */
 
-package v13
+package client
 
 import (
 	"encoding/json"
@@ -22,7 +22,6 @@ import (
 	"net/http"
 
 	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 )
 
 const (
@@ -30,7 +29,7 @@ const (
 )
 
 // Create a Role
-func (to *Session) CreateRole(region v13.Role) (tc.Alerts, ReqInf, int, error) {
+func (to *Session) CreateRole(region tc.Role) (tc.Alerts, ReqInf, int, error) {
 
 	var remoteAddr net.Addr
 	reqBody, err := json.Marshal(region)
@@ -51,7 +50,7 @@ func (to *Session) CreateRole(region v13.Role) (tc.Alerts, ReqInf, int, error) {
 }
 
 // Update a Role by ID
-func (to *Session) UpdateRoleByID(id int, region v13.Role) (tc.Alerts, ReqInf, int, error) {
+func (to *Session) UpdateRoleByID(id int, region tc.Role) (tc.Alerts, ReqInf, int, error) {
 
 	var remoteAddr net.Addr
 	reqBody, err := json.Marshal(region)
@@ -73,53 +72,53 @@ func (to *Session) UpdateRoleByID(id int, region v13.Role) (tc.Alerts, ReqInf, i
 }
 
 // Returns a list of roles
-func (to *Session) GetRoles() ([]v13.Role, ReqInf, int, error) {
+func (to *Session) GetRoles() ([]tc.Role, ReqInf, int, error) {
 	resp, remoteAddr, errClient := to.rawRequest(http.MethodGet, API_v13_ROLES, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if resp != nil {
 		defer resp.Body.Close()
 
-		var data v13.RolesResponse
+		var data tc.RolesResponse
 		if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
 			return data.Response, reqInf, resp.StatusCode, err
 		}
 		return data.Response, reqInf, resp.StatusCode, errClient
 	}
-	return []v13.Role{}, reqInf, 0, errClient
+	return []tc.Role{}, reqInf, 0, errClient
 }
 
 // GET a Role by the Role id
-func (to *Session) GetRoleByID(id int) ([]v13.Role, ReqInf, int, error) {
+func (to *Session) GetRoleByID(id int) ([]tc.Role, ReqInf, int, error) {
 	route := fmt.Sprintf("%s/?id=%d", API_v13_ROLES, id)
 	resp, remoteAddr, errClient := to.rawRequest(http.MethodGet, route, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if resp != nil {
 		defer resp.Body.Close()
 
-		var data v13.RolesResponse
+		var data tc.RolesResponse
 		if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
 			return data.Response, reqInf, resp.StatusCode, err
 		}
 		return data.Response, reqInf, resp.StatusCode, errClient
 	}
-	return []v13.Role{}, reqInf, 0, errClient
+	return []tc.Role{}, reqInf, 0, errClient
 }
 
 // GET a Role by the Role name
-func (to *Session) GetRoleByName(name string) ([]v13.Role, ReqInf, int, error) {
+func (to *Session) GetRoleByName(name string) ([]tc.Role, ReqInf, int, error) {
 	url := fmt.Sprintf("%s?name=%s", API_v13_ROLES, name)
 	resp, remoteAddr, errClient := to.rawRequest(http.MethodGet, url, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if resp != nil {
 		defer resp.Body.Close()
 
-		var data v13.RolesResponse
+		var data tc.RolesResponse
 		if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
 			return data.Response, reqInf, resp.StatusCode, err
 		}
 		return data.Response, reqInf, resp.StatusCode, errClient
 	}
-	return []v13.Role{}, reqInf, 0, errClient
+	return []tc.Role{}, reqInf, 0, errClient
 }
 
 // DELETE a Role by ID
diff --git a/traffic_ops/client/server.go b/traffic_ops/client/server.go
index eccfeab58..0e6f9b505 100644
--- a/traffic_ops/client/server.go
+++ b/traffic_ops/client/server.go
@@ -17,13 +17,59 @@ package client
 
 import (
 	"encoding/json"
+	"errors"
 	"fmt"
+	"net"
+	"net/http"
 	"net/url"
 	"strings"
 
-	tc "github.com/apache/trafficcontrol/lib/go-tc"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 )
 
+const (
+	API_v13_Servers = "/api/1.3/servers"
+)
+
+// Create a Server
+func (to *Session) CreateServer(server tc.Server) (tc.Alerts, ReqInf, error) {
+
+	var remoteAddr net.Addr
+	reqBody, err := json.Marshal(server)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_Servers, reqBody)
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	defer resp.Body.Close()
+	var alerts tc.Alerts
+	err = json.NewDecoder(resp.Body).Decode(&alerts)
+	return alerts, reqInf, nil
+}
+
+// Update a Server by ID
+func (to *Session) UpdateServerByID(id int, server tc.Server) (tc.Alerts, ReqInf, error) {
+
+	var remoteAddr net.Addr
+	reqBody, err := json.Marshal(server)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	route := fmt.Sprintf("%s/%d", API_v13_Servers, id)
+	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	defer resp.Body.Close()
+	var alerts tc.Alerts
+	err = json.NewDecoder(resp.Body).Decode(&alerts)
+	return alerts, reqInf, nil
+}
+
 // Servers gets an array of servers
 // Deprecated: use GetServers
 func (to *Session) Servers() ([]tc.Server, error) {
@@ -31,9 +77,9 @@ func (to *Session) Servers() ([]tc.Server, error) {
 	return s, err
 }
 
+// Returns a list of Servers
 func (to *Session) GetServers() ([]tc.Server, ReqInf, error) {
-	url := "/api/1.2/servers.json"
-	resp, remoteAddr, err := to.request("GET", url, nil)
+	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_Servers, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
 		return nil, reqInf, err
@@ -41,46 +87,80 @@ func (to *Session) GetServers() ([]tc.Server, ReqInf, error) {
 	defer resp.Body.Close()
 
 	var data tc.ServersResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
+	err = json.NewDecoder(resp.Body).Decode(&data)
 	return data.Response, reqInf, nil
 }
 
 // Server gets a server by hostname
 // Deprecated: use GetServer
 func (to *Session) Server(name string) (*tc.Server, error) {
-	s, _, err := to.GetServer(name)
-	return s, err
+	s, _, err := to.GetServerByHostName(name)
+	if len(s) > 0 {
+		return &s[0], err
+	}
+	return nil, errors.New("not found")
+}
+
+// GET a Server by the Server ID
+func (to *Session) GetServerByID(id int) ([]tc.Server, ReqInf, error) {
+	route := fmt.Sprintf("%s/%d", API_v13_Servers, id)
+	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.ServersResponse
+	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
+		return nil, reqInf, err
+	}
+
+	return data.Response, reqInf, nil
 }
 
-func (to *Session) GetServer(name string) (*tc.Server, ReqInf, error) {
-	url := fmt.Sprintf("/api/1.2/servers/hostname/%s/details", name)
-	resp, remoteAddr, err := to.request("GET", url, nil)
+// GET a Server by the Server hostname
+func (to *Session) GetServerByHostName(hostName string) ([]tc.Server, ReqInf, error) {
+	url := fmt.Sprintf("%s?hostName=%s", API_v13_Servers, hostName)
+	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
 		return nil, reqInf, err
 	}
 	defer resp.Body.Close()
 
-	data := tc.ServersDetailResponse{}
+	var data tc.ServersResponse
 	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
 		return nil, reqInf, err
 	}
 
-	return &data.Response, reqInf, nil
+	return data.Response, reqInf, nil
+}
+
+// DELETE a Server by ID
+func (to *Session) DeleteServerByID(id int) (tc.Alerts, ReqInf, error) {
+	route := fmt.Sprintf("%s/%d", API_v13_Servers, id)
+	resp, remoteAddr, err := to.request(http.MethodDelete, route, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	defer resp.Body.Close()
+	var alerts tc.Alerts
+	err = json.NewDecoder(resp.Body).Decode(&alerts)
+	return alerts, reqInf, nil
 }
 
 // ServersByType gets an array of serves of a specified type.
+// Deprecated: use GetServersByType
 func (to *Session) ServersByType(qparams url.Values) ([]tc.Server, error) {
 	ss, _, err := to.GetServersByType(qparams)
 	return ss, err
 }
 
 func (to *Session) GetServersByType(qparams url.Values) ([]tc.Server, ReqInf, error) {
-	url := fmt.Sprintf("/api/1.2/servers.json?%s", qparams.Encode())
-	resp, remoteAddr, err := to.request("GET", url, nil)
+	url := fmt.Sprintf("%s.json?%s", API_v13_Servers, qparams.Encode())
+	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
 		return nil, reqInf, err
diff --git a/traffic_ops/client/session.go b/traffic_ops/client/session.go
index 17268ff62..967c775bf 100644
--- a/traffic_ops/client/session.go
+++ b/traffic_ops/client/session.go
@@ -114,7 +114,7 @@ func (to *Session) login() (net.Addr, error) {
 		return nil, errors.New("creating login credentials: " + err.Error())
 	}
 
-	path := "/api/1.2/user/login"
+	path := apiBase + "/user/login"
 	resp, remoteAddr, err := to.rawRequest("POST", path, credentials)
 	resp, remoteAddr, err = to.ErrUnlessOK(resp, remoteAddr, err, path)
 	if err != nil {
@@ -142,6 +142,41 @@ func (to *Session) login() (net.Addr, error) {
 	return remoteAddr, nil
 }
 
+// logout of Traffic Ops
+func (to *Session) logout() (net.Addr, error) {
+	credentials, err := loginCreds(to.UserName, to.Password)
+	if err != nil {
+		return nil, errors.New("creating login credentials: " + err.Error())
+	}
+
+	path := apiBase + "/user/logout"
+	resp, remoteAddr, err := to.rawRequest("POST", path, credentials)
+	resp, remoteAddr, err = to.ErrUnlessOK(resp, remoteAddr, err, path)
+	if err != nil {
+		return remoteAddr, errors.New("requesting: " + err.Error())
+	}
+	defer resp.Body.Close()
+
+	var alerts tc.Alerts
+	if err := json.NewDecoder(resp.Body).Decode(&alerts); err != nil {
+		return remoteAddr, errors.New("decoding response JSON: " + err.Error())
+	}
+
+	success := false
+	for _, alert := range alerts.Alerts {
+		if alert.Level == "success" && alert.Text == "Successfully logged in." {
+			success = true
+			break
+		}
+	}
+
+	if !success {
+		return remoteAddr, fmt.Errorf("Logout failed, alerts string: %+v", alerts)
+	}
+
+	return remoteAddr, nil
+}
+
 // Login to traffic_ops, the response should set the cookie for this session
 // automatically. Start with
 //     to := traffic_ops.Login("user", "passwd", true)
@@ -172,6 +207,43 @@ func LoginWithAgent(toURL string, toUser string, toPasswd string, insecure bool,
 	return to, remoteAddr, nil
 }
 
+// Logout of traffic_ops
+func LogoutWithAgent(toURL string, toUser string, toPasswd string, insecure bool, userAgent string, useCache bool, requestTimeout time.Duration) (*Session, net.Addr, error) {
+	options := cookiejar.Options{
+		PublicSuffixList: publicsuffix.List,
+	}
+
+	jar, err := cookiejar.New(&options)
+	if err != nil {
+		return nil, nil, err
+	}
+
+	to := NewSession(toUser, toPasswd, toURL, userAgent, &http.Client{
+		Timeout: requestTimeout,
+		Transport: &http.Transport{
+			TLSClientConfig: &tls.Config{InsecureSkipVerify: insecure},
+		},
+		Jar: jar,
+	}, useCache)
+
+	remoteAddr, err := to.logout()
+	if err != nil {
+		return nil, remoteAddr, errors.New("logging out: " + err.Error())
+	}
+	return to, remoteAddr, nil
+}
+
+// NewNoAuthSession returns a new Session without logging in
+// this can be used for querying unauthenticated endpoints without requiring a login
+func NewNoAuthSession(toURL string, insecure bool, userAgent string, useCache bool, requestTimeout time.Duration) *Session {
+	return NewSession("", "", toURL, userAgent, &http.Client{
+		Timeout: requestTimeout,
+		Transport: &http.Transport{
+			TLSClientConfig: &tls.Config{InsecureSkipVerify: insecure},
+		},
+	}, useCache)
+}
+
 // ErrUnlessOk returns nil and an error if the given Response's status code is anything but 200 OK. This includes reading the Response.Body and Closing it. Otherwise, the given response and error are returned unchanged.
 func (to *Session) ErrUnlessOK(resp *http.Response, remoteAddr net.Addr, err error, path string) (*http.Response, net.Addr, error) {
 	if err != nil {
diff --git a/traffic_ops/client/v13/staticdnsentry.go b/traffic_ops/client/staticdnsentry.go
similarity index 84%
rename from traffic_ops/client/v13/staticdnsentry.go
rename to traffic_ops/client/staticdnsentry.go
index 94e927c3b..0479160f7 100644
--- a/traffic_ops/client/v13/staticdnsentry.go
+++ b/traffic_ops/client/staticdnsentry.go
@@ -13,7 +13,7 @@
    limitations under the License.
 */
 
-package v13
+package client
 
 import (
 	"encoding/json"
@@ -22,7 +22,6 @@ import (
 	"net/http"
 
 	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 )
 
 const (
@@ -30,7 +29,7 @@ const (
 )
 
 // Create a StaticDNSEntry
-func (to *Session) CreateStaticDNSEntry(cdn v13.StaticDNSEntry) (tc.Alerts, ReqInf, error) {
+func (to *Session) CreateStaticDNSEntry(cdn tc.StaticDNSEntry) (tc.Alerts, ReqInf, error) {
 
 	var remoteAddr net.Addr
 	reqBody, err := json.Marshal(cdn)
@@ -49,7 +48,7 @@ func (to *Session) CreateStaticDNSEntry(cdn v13.StaticDNSEntry) (tc.Alerts, ReqI
 }
 
 // Update a StaticDNSEntry by ID
-func (to *Session) UpdateStaticDNSEntryByID(id int, cdn v13.StaticDNSEntry) (tc.Alerts, ReqInf, int, error) {
+func (to *Session) UpdateStaticDNSEntryByID(id int, cdn tc.StaticDNSEntry) (tc.Alerts, ReqInf, int, error) {
 
 	var remoteAddr net.Addr
 	reqBody, err := json.Marshal(cdn)
@@ -71,7 +70,7 @@ func (to *Session) UpdateStaticDNSEntryByID(id int, cdn v13.StaticDNSEntry) (tc.
 }
 
 // Returns a list of StaticDNSEntrys
-func (to *Session) GetStaticDNSEntries() ([]v13.StaticDNSEntry, ReqInf, error) {
+func (to *Session) GetStaticDNSEntries() ([]tc.StaticDNSEntry, ReqInf, error) {
 	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_StaticDNSEntries, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
@@ -79,13 +78,13 @@ func (to *Session) GetStaticDNSEntries() ([]v13.StaticDNSEntry, ReqInf, error) {
 	}
 	defer resp.Body.Close()
 
-	var data v13.StaticDNSEntriesResponse
+	var data tc.StaticDNSEntriesResponse
 	err = json.NewDecoder(resp.Body).Decode(&data)
 	return data.Response, reqInf, nil
 }
 
 // GET a StaticDNSEntry by the StaticDNSEntry ID
-func (to *Session) GetStaticDNSEntryByID(id int) ([]v13.StaticDNSEntry, ReqInf, error) {
+func (to *Session) GetStaticDNSEntryByID(id int) ([]tc.StaticDNSEntry, ReqInf, error) {
 	route := fmt.Sprintf("%s?id=%d", API_v13_StaticDNSEntries, id)
 	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
@@ -94,7 +93,7 @@ func (to *Session) GetStaticDNSEntryByID(id int) ([]v13.StaticDNSEntry, ReqInf,
 	}
 	defer resp.Body.Close()
 
-	var data v13.StaticDNSEntriesResponse
+	var data tc.StaticDNSEntriesResponse
 	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
 		return nil, reqInf, err
 	}
@@ -103,7 +102,7 @@ func (to *Session) GetStaticDNSEntryByID(id int) ([]v13.StaticDNSEntry, ReqInf,
 }
 
 // GET a StaticDNSEntry by the StaticDNSEntry hsot
-func (to *Session) GetStaticDNSEntriesByHost(host string) ([]v13.StaticDNSEntry, ReqInf, error) {
+func (to *Session) GetStaticDNSEntriesByHost(host string) ([]tc.StaticDNSEntry, ReqInf, error) {
 	url := fmt.Sprintf("%s?host=%s", API_v13_StaticDNSEntries, host)
 	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
@@ -112,7 +111,7 @@ func (to *Session) GetStaticDNSEntriesByHost(host string) ([]v13.StaticDNSEntry,
 	}
 	defer resp.Body.Close()
 
-	var data v13.StaticDNSEntriesResponse
+	var data tc.StaticDNSEntriesResponse
 	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
 		return nil, reqInf, err
 	}
diff --git a/traffic_ops/client/v13/status.go b/traffic_ops/client/status.go
similarity index 99%
rename from traffic_ops/client/v13/status.go
rename to traffic_ops/client/status.go
index 2abc022b1..0c9b15bdd 100644
--- a/traffic_ops/client/v13/status.go
+++ b/traffic_ops/client/status.go
@@ -13,7 +13,7 @@
    limitations under the License.
 */
 
-package v13
+package client
 
 import (
 	"encoding/json"
diff --git a/traffic_ops/client/tenant.go b/traffic_ops/client/tenant.go
index 94e5e4e76..6955b727a 100644
--- a/traffic_ops/client/tenant.go
+++ b/traffic_ops/client/tenant.go
@@ -17,6 +17,8 @@ package client
 
 import (
 	"encoding/json"
+	"errors"
+	"net/url"
 
 	tc "github.com/apache/trafficcontrol/lib/go-tc"
 )
@@ -43,6 +45,24 @@ func (to *Session) Tenant(id string) (*tc.Tenant, ReqInf, error) {
 	return &data.Response[0], reqInf, nil
 }
 
+// TenantByName gets the Tenant for the name it's passed
+func (to *Session) TenantByName(name string) (*tc.Tenant, ReqInf, error) {
+	var data tc.GetTenantsResponse
+	query := tenantsEp() + "?name=" + url.QueryEscape(name)
+	reqInf, err := get(to, query, &data)
+	if err != nil {
+		return nil, reqInf, err
+	}
+
+	var ten *tc.Tenant
+	if len(data.Response) > 0 {
+		ten = &data.Response[0]
+	} else {
+		err = errors.New("no tenant found with name " + name)
+	}
+	return ten, reqInf, err
+}
+
 // CreateTenant creates the Tenant it's passed
 func (to *Session) CreateTenant(t *tc.Tenant) (*tc.TenantResponse, error) {
 	var data tc.TenantResponse
diff --git a/traffic_ops/client/traffic_monitor.go b/traffic_ops/client/traffic_monitor.go
index 24d46e215..73905a65a 100644
--- a/traffic_ops/client/traffic_monitor.go
+++ b/traffic_ops/client/traffic_monitor.go
@@ -3,8 +3,7 @@ package client
 import (
 	"encoding/json"
 	"fmt"
-
-	tc "github.com/apache/trafficcontrol/lib/go-tc"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 )
 
 /*
@@ -53,7 +52,7 @@ func (to *Session) TrafficMonitorConfig(cdn string) (*tc.TrafficMonitorConfig, e
 }
 
 func (to *Session) GetTrafficMonitorConfig(cdn string) (*tc.TrafficMonitorConfig, ReqInf, error) {
-	url := fmt.Sprintf("/api/1.2/cdns/%s/configs/monitoring.json", cdn)
+	url := fmt.Sprintf("/api/1.3/cdns/%s/configs/monitoring.json", cdn)
 	resp, remoteAddr, err := to.request("GET", url, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
diff --git a/traffic_ops/client/type.go b/traffic_ops/client/type.go
index 8b5c81bf7..496c1b984 100644
--- a/traffic_ops/client/type.go
+++ b/traffic_ops/client/type.go
@@ -18,10 +18,56 @@ package client
 import (
 	"encoding/json"
 	"errors"
+	"fmt"
+	"net"
+	"net/http"
 
-	tc "github.com/apache/trafficcontrol/lib/go-tc"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 )
 
+const (
+	API_v13_Types = "/api/1.3/types"
+)
+
+// Create a Type
+func (to *Session) CreateType(typ tc.Type) (tc.Alerts, ReqInf, error) {
+
+	var remoteAddr net.Addr
+	reqBody, err := json.Marshal(typ)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_Types, reqBody)
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	defer resp.Body.Close()
+	var alerts tc.Alerts
+	err = json.NewDecoder(resp.Body).Decode(&alerts)
+	return alerts, reqInf, nil
+}
+
+// Update a Type by ID
+func (to *Session) UpdateTypeByID(id int, typ tc.Type) (tc.Alerts, ReqInf, error) {
+
+	var remoteAddr net.Addr
+	reqBody, err := json.Marshal(typ)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	route := fmt.Sprintf("%s/%d", API_v13_Types, id)
+	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	defer resp.Body.Close()
+	var alerts tc.Alerts
+	err = json.NewDecoder(resp.Body).Decode(&alerts)
+	return alerts, reqInf, nil
+}
+
 // Types gets an array of Types.
 // optional parameter: userInTable
 // Deprecated: use GetTypes
@@ -35,7 +81,7 @@ func (to *Session) GetTypes(useInTable ...string) ([]tc.Type, ReqInf, error) {
 		return nil, ReqInf{}, errors.New("Please pass in a single value for the 'useInTable' parameter")
 	}
 
-	url := "/api/1.2/types.json"
+	url := apiBase + "/types.json"
 	resp, remoteAddr, err := to.request("GET", url, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
@@ -61,3 +107,53 @@ func (to *Session) GetTypes(useInTable ...string) ([]tc.Type, ReqInf, error) {
 
 	return types, reqInf, nil
 }
+
+// GET a Type by the Type ID
+func (to *Session) GetTypeByID(id int) ([]tc.Type, ReqInf, error) {
+	route := fmt.Sprintf("%s/%d", API_v13_Types, id)
+	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.TypesResponse
+	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
+		return nil, reqInf, err
+	}
+
+	return data.Response, reqInf, nil
+}
+
+// GET a Type by the Type name
+func (to *Session) GetTypeByName(name string) ([]tc.Type, ReqInf, error) {
+	url := fmt.Sprintf("%s?name=%s", API_v13_Types, name)
+	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return nil, reqInf, err
+	}
+	defer resp.Body.Close()
+
+	var data tc.TypesResponse
+	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
+		return nil, reqInf, err
+	}
+
+	return data.Response, reqInf, nil
+}
+
+// DELETE a Type by ID
+func (to *Session) DeleteTypeByID(id int) (tc.Alerts, ReqInf, error) {
+	route := fmt.Sprintf("%s/%d", API_v13_Types, id)
+	resp, remoteAddr, err := to.request(http.MethodDelete, route, nil)
+	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
+	if err != nil {
+		return tc.Alerts{}, reqInf, err
+	}
+	defer resp.Body.Close()
+	var alerts tc.Alerts
+	err = json.NewDecoder(resp.Body).Decode(&alerts)
+	return alerts, reqInf, nil
+}
diff --git a/traffic_ops/client/user.go b/traffic_ops/client/user.go
index efdf8d334..b7ca1b1d7 100644
--- a/traffic_ops/client/user.go
+++ b/traffic_ops/client/user.go
@@ -1,3 +1,5 @@
+package client
+
 /*
 
    Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,12 +15,10 @@
    limitations under the License.
 */
 
-package client
-
 import (
 	"encoding/json"
 
-	tc "github.com/apache/trafficcontrol/lib/go-tc"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 )
 
 // Users gets an array of Users.
@@ -29,7 +29,7 @@ func (to *Session) Users() ([]tc.User, error) {
 }
 
 func (to *Session) GetUsers() ([]tc.User, ReqInf, error) {
-	url := "/api/1.2/users.json"
+	url := apiBase + "/users.json"
 	resp, remoteAddr, err := to.request("GET", url, nil)
 	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
 	if err != nil {
@@ -44,3 +44,14 @@ func (to *Session) GetUsers() ([]tc.User, ReqInf, error) {
 
 	return data.Response, reqInf, nil
 }
+
+// GetUserCurrent gets information about the current user
+func (to *Session) GetUserCurrent() (*tc.UserCurrent, ReqInf, error) {
+	url := apiBase + `/user/current`
+	resp := tc.UserCurrentResponse{}
+	reqInf, err := get(to, url, &resp)
+	if err != nil {
+		return nil, reqInf, err
+	}
+	return &resp.Response, reqInf, nil
+}
diff --git a/traffic_ops/client/util.go b/traffic_ops/client/util.go
index 574ade6c7..af95be624 100644
--- a/traffic_ops/client/util.go
+++ b/traffic_ops/client/util.go
@@ -15,7 +15,11 @@
 
 package client
 
-import "encoding/json"
+import (
+	"encoding/json"
+	"errors"
+	"io/ioutil"
+)
 
 func get(to *Session, endpoint string, respStruct interface{}) (ReqInf, error) {
 	return makeReq(to, "GET", endpoint, nil, respStruct)
@@ -44,8 +48,13 @@ func makeReq(to *Session, method, endpoint string, body []byte, respStruct inter
 	}
 	defer resp.Body.Close()
 
-	if err := json.NewDecoder(resp.Body).Decode(respStruct); err != nil {
-		return reqInf, err
+	bts, err := ioutil.ReadAll(resp.Body)
+	if err != nil {
+		return reqInf, errors.New("reading body: " + err.Error())
+	}
+
+	if err := json.Unmarshal(bts, respStruct); err != nil {
+		return reqInf, errors.New("unmarshalling body '" + string(body) + "': " + err.Error())
 	}
 
 	return reqInf, nil
diff --git a/traffic_ops/client/v13/README.md b/traffic_ops/client/v13/README.md
deleted file mode 100644
index 860a8cf5b..000000000
--- a/traffic_ops/client/v13/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-# TO Client Library Golang
-
-## Getting Started
-1. Obtain the latest version of the library
-
-`go get github.com/apache/trafficcontrol/traffic_ops/client/v13`
-
-2. Get a basic TO session started and fetch a list of CDNs
-```go
-package main
-
-import (
-	"fmt"
-	"os"
-	"time"
-
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
-	toclient "github.com/apache/trafficcontrol/traffic_ops/client/v13"
-)
-
-const TOURL = "http://localhost"
-const TOUser = "user"
-const TOPassword = "password"
-const AllowInsecureConnections = true
-const UserAgent = "MySampleApp"
-const UseClientCache = false
-const TrafficOpsRequestTimeout = time.Second * time.Duration(10)
-
-func main() {
-	session, remoteaddr, err := toclient.LoginWithAgent(
-		TOURL,
-		TOUser,
-		TOPassword,
-		AllowInsecureConnections,
-		UserAgent,
-		UseClientCache,
-		TrafficOpsRequestTimeout)
-	if err != nil {
-		fmt.Printf("An error occurred while logging in:\n\t%v\n", err)
-		os.Exit(1)
-	}
-	fmt.Println("Connected to: " + remoteaddr.String())
-	var cdns []v13.CDN
-	cdns, _, err = session.GetCDNs()
-	if err != nil {
-		fmt.Printf("An error occurred while getting cdns:\n\t%v\n", err)
-		os.Exit(1)
-	}
-	for _, cdn := range cdns {
-		fmt.Println(cdn.Name)
-	}
-}
-```
diff --git a/traffic_ops/client/v13/cachegroup.go b/traffic_ops/client/v13/cachegroup.go
deleted file mode 100644
index b67de6e9b..000000000
--- a/traffic_ops/client/v13/cachegroup.go
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-package v13
-
-import (
-	"encoding/json"
-	"fmt"
-	"net"
-	"net/http"
-
-	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
-)
-
-const (
-	API_v13_CacheGroups = "/api/1.3/cachegroups"
-)
-
-// Create a CacheGroup
-func (to *Session) CreateCacheGroupNullable(cachegroup v13.CacheGroupNullable) (*v13.CacheGroupDetailResponse, ReqInf, error) {
-
-	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(cachegroup)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_CacheGroups, reqBody)
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-	var cachegroupResp v13.CacheGroupDetailResponse
-	if err = json.NewDecoder(resp.Body).Decode(&cachegroupResp); err != nil {
-		return nil, reqInf, err
-	}
-	return &cachegroupResp, reqInf, nil
-}
-
-// Create a CacheGroup
-// Deprecated: Use CreateCacheGroupNullable
-func (to *Session) CreateCacheGroup(cachegroup v13.CacheGroup) (tc.Alerts, ReqInf, error) {
-
-	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(cachegroup)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_CacheGroups, reqBody)
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
-
-// Update a CacheGroup by ID
-func (to *Session) UpdateCacheGroupNullableByID(id int, cachegroup v13.CacheGroupNullable) (*v13.CacheGroupDetailResponse, ReqInf, error) {
-
-	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(cachegroup)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	route := fmt.Sprintf("%s/%d", API_v13_CacheGroups, id)
-	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-	var cachegroupResp v13.CacheGroupDetailResponse
-	if err = json.NewDecoder(resp.Body).Decode(&cachegroupResp); err != nil {
-		return nil, reqInf, err
-	}
-	return &cachegroupResp, reqInf, nil
-}
-
-// Update a CacheGroup by ID
-// Deprecated: use UpdateCachegroupNullableByID
-func (to *Session) UpdateCacheGroupByID(id int, cachegroup v13.CacheGroup) (tc.Alerts, ReqInf, error) {
-
-	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(cachegroup)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	route := fmt.Sprintf("%s/%d", API_v13_CacheGroups, id)
-	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
-
-// Returns a list of CacheGroups
-func (to *Session) GetCacheGroupsNullable() ([]v13.CacheGroupNullable, ReqInf, error) {
-	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_CacheGroups, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.CacheGroupsNullableResponse
-	if err = json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-	return data.Response, reqInf, nil
-}
-
-// Returns a list of CacheGroups
-// Deprecated: use GetCacheGroupsNullable
-func (to *Session) GetCacheGroups() ([]v13.CacheGroup, ReqInf, error) {
-	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_CacheGroups, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.CacheGroupsResponse
-	err = json.NewDecoder(resp.Body).Decode(&data)
-	return data.Response, reqInf, nil
-}
-
-// GET a CacheGroup by the CacheGroup id
-func (to *Session) GetCacheGroupNullableByID(id int) ([]v13.CacheGroupNullable, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v13_CacheGroups, id)
-	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.CacheGroupsNullableResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// GET a CacheGroup by the CacheGroup id
-// Deprecated: use GetCacheGroupNullableByID
-func (to *Session) GetCacheGroupByID(id int) ([]v13.CacheGroup, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v13_CacheGroups, id)
-	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.CacheGroupsResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// GET a CacheGroup by the CacheGroup name
-func (to *Session) GetCacheGroupNullableByName(name string) ([]v13.CacheGroupNullable, ReqInf, error) {
-	url := fmt.Sprintf("%s?name=%s", API_v13_CacheGroups, name)
-	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.CacheGroupsNullableResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// GET a CacheGroup by the CacheGroup name
-// Deprecated: use GetCachegroupNullableByName
-func (to *Session) GetCacheGroupByName(name string) ([]v13.CacheGroup, ReqInf, error) {
-	url := fmt.Sprintf("%s?name=%s", API_v13_CacheGroups, name)
-	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.CacheGroupsResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// DELETE a CacheGroup by ID
-func (to *Session) DeleteCacheGroupByID(id int) (tc.Alerts, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v13_CacheGroups, id)
-	resp, remoteAddr, err := to.request(http.MethodDelete, route, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	if err = json.NewDecoder(resp.Body).Decode(&alerts); err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	return alerts, reqInf, nil
-}
diff --git a/traffic_ops/client/v13/cdn.go b/traffic_ops/client/v13/cdn.go
deleted file mode 100644
index dbb236348..000000000
--- a/traffic_ops/client/v13/cdn.go
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-package v13
-
-import (
-	"encoding/json"
-	"fmt"
-	"net"
-	"net/http"
-
-	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
-)
-
-const (
-	API_v13_CDNs = "/api/1.3/cdns"
-)
-
-// Create a CDN
-func (to *Session) CreateCDN(cdn v13.CDN) (tc.Alerts, ReqInf, error) {
-
-	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(cdn)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_CDNs, reqBody)
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
-
-// Update a CDN by ID
-func (to *Session) UpdateCDNByID(id int, cdn v13.CDN) (tc.Alerts, ReqInf, error) {
-
-	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(cdn)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	route := fmt.Sprintf("%s/%d", API_v13_CDNs, id)
-	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
-
-// Returns a list of CDNs
-func (to *Session) GetCDNs() ([]v13.CDN, ReqInf, error) {
-	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_CDNs, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.CDNsResponse
-	err = json.NewDecoder(resp.Body).Decode(&data)
-	return data.Response, reqInf, nil
-}
-
-// GET a CDN by the CDN ID
-func (to *Session) GetCDNByID(id int) ([]v13.CDN, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v13_CDNs, id)
-	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.CDNsResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// GET a CDN by the CDN name
-func (to *Session) GetCDNByName(name string) ([]v13.CDN, ReqInf, error) {
-	url := fmt.Sprintf("%s?name=%s", API_v13_CDNs, name)
-	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.CDNsResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// DELETE a CDN by ID
-func (to *Session) DeleteCDNByID(id int) (tc.Alerts, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v13_CDNs, id)
-	resp, remoteAddr, err := to.request(http.MethodDelete, route, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
-
-func (to *Session) GetCDNSSLKeys(name string) ([]v13.CDNSSLKeys, ReqInf, error) {
-	url := fmt.Sprintf("%s/name/%s/sslkeys", API_v13_CDNs, name)
-	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.CDNSSLKeysResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
diff --git a/traffic_ops/client/v13/crconfig.go b/traffic_ops/client/v13/crconfig.go
deleted file mode 100644
index ef8356a01..000000000
--- a/traffic_ops/client/v13/crconfig.go
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-package v13
-
-import "fmt"
-
-// GetCRConfig returns the raw JSON bytes of the CRConfig from Traffic Ops, and whether the bytes were from the client's internal cache.
-func (to *Session) GetCRConfig(cdn string) ([]byte, ReqInf, error) {
-	url := fmt.Sprintf("/CRConfig-Snapshots/%s/CRConfig.json", cdn)
-	return to.getBytesWithTTL(url, tmPollingInterval)
-}
diff --git a/traffic_ops/client/v13/deliveryservice.go b/traffic_ops/client/v13/deliveryservice.go
deleted file mode 100644
index c5a54485f..000000000
--- a/traffic_ops/client/v13/deliveryservice.go
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-package v13
-
-import (
-	"encoding/json"
-	"strconv"
-
-	tc "github.com/apache/trafficcontrol/lib/go-tc"
-)
-
-// DeliveryServices gets an array of DeliveryServices
-// Deprecated: use GetDeliveryServices
-func (to *Session) DeliveryServices() ([]tc.DeliveryServiceV13, error) {
-	dses, _, err := to.GetDeliveryServices()
-	return dses, err
-}
-
-func (to *Session) GetDeliveryServices() ([]tc.DeliveryServiceV13, ReqInf, error) {
-	var data tc.DeliveryServicesResponse
-	reqInf, err := get(to, deliveryServicesEp(), &data)
-	if err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// DeliveryServicesByServer gets an array of all DeliveryServices with the given server ID assigend.
-// Deprecated: use GetDeliveryServicesByServer
-func (to *Session) DeliveryServicesByServer(id int) ([]tc.DeliveryServiceV13, error) {
-	dses, _, err := to.GetDeliveryServicesByServer(id)
-	return dses, err
-}
-
-func (to *Session) GetDeliveryServicesByServer(id int) ([]tc.DeliveryServiceV13, ReqInf, error) {
-	var data tc.DeliveryServicesResponse
-	reqInf, err := get(to, deliveryServicesByServerEp(strconv.Itoa(id)), &data)
-	if err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-func (to *Session) GetDeliveryServiceByXMLID(XMLID string) ([]tc.DeliveryService, ReqInf, error) {
-	var data tc.GetDeliveryServiceResponse
-	reqInf, err := get(to, deliveryServicesByXMLID(XMLID), &data)
-	if err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// DeliveryService gets the DeliveryService for the ID it's passed
-// Deprecated: use GetDeliveryService
-func (to *Session) DeliveryService(id string) (*tc.DeliveryServiceV13, error) {
-	ds, _, err := to.GetDeliveryService(id)
-	return ds, err
-}
-
-func (to *Session) GetDeliveryService(id string) (*tc.DeliveryServiceV13, ReqInf, error) {
-	var data tc.DeliveryServicesResponse
-	reqInf, err := get(to, deliveryServiceEp(id), &data)
-	if err != nil {
-		return nil, reqInf, err
-	}
-	if len(data.Response) == 0 {
-		return nil, reqInf, nil
-	}
-	return &data.Response[0], reqInf, nil
-}
-
-// CreateDeliveryService creates the DeliveryService it's passed
-func (to *Session) CreateDeliveryService(ds *tc.DeliveryServiceV13) (*tc.CreateDeliveryServiceResponse, error) {
-	var data tc.CreateDeliveryServiceResponse
-	jsonReq, err := json.Marshal(ds)
-	if err != nil {
-		return nil, err
-	}
-	err = post(to, deliveryServicesEp(), jsonReq, &data)
-	if err != nil {
-		return nil, err
-	}
-
-	return &data, nil
-}
-
-// UpdateDeliveryService updates the DeliveryService matching the ID it's passed with
-// the DeliveryService it is passed
-func (to *Session) UpdateDeliveryService(id string, ds *tc.DeliveryServiceV13) (*tc.UpdateDeliveryServiceResponse, error) {
-	var data tc.UpdateDeliveryServiceResponse
-	jsonReq, err := json.Marshal(ds)
-	if err != nil {
-		return nil, err
-	}
-	err = put(to, deliveryServiceEp(id), jsonReq, &data)
-	if err != nil {
-		return nil, err
-	}
-
-	return &data, nil
-}
-
-// DeleteDeliveryService deletes the DeliveryService matching the ID it's passed
-func (to *Session) DeleteDeliveryService(id string) (*tc.DeleteDeliveryServiceResponse, error) {
-	var data tc.DeleteDeliveryServiceResponse
-	err := del(to, deliveryServiceEp(id), &data)
-	if err != nil {
-		return nil, err
-	}
-
-	return &data, nil
-}
-
-// DeliveryServiceState gets the DeliveryServiceState for the ID it's passed
-// Deprecated: use GetDeliveryServiceState
-func (to *Session) DeliveryServiceState(id string) (*tc.DeliveryServiceState, error) {
-	dss, _, err := to.GetDeliveryServiceState(id)
-	return dss, err
-}
-
-func (to *Session) GetDeliveryServiceState(id string) (*tc.DeliveryServiceState, ReqInf, error) {
-	var data tc.DeliveryServiceStateResponse
-	reqInf, err := get(to, deliveryServiceStateEp(id), &data)
-	if err != nil {
-		return nil, reqInf, err
-	}
-
-	return &data.Response, reqInf, nil
-}
-
-// DeliveryServiceHealth gets the DeliveryServiceHealth for the ID it's passed
-// Deprecated: use GetDeliveryServiceHealth
-func (to *Session) DeliveryServiceHealth(id string) (*tc.DeliveryServiceHealth, error) {
-	dsh, _, err := to.GetDeliveryServiceHealth(id)
-	return dsh, err
-}
-
-func (to *Session) GetDeliveryServiceHealth(id string) (*tc.DeliveryServiceHealth, ReqInf, error) {
-	var data tc.DeliveryServiceHealthResponse
-	reqInf, err := get(to, deliveryServiceHealthEp(id), &data)
-	if err != nil {
-		return nil, reqInf, err
-	}
-
-	return &data.Response, reqInf, nil
-}
-
-// DeliveryServiceCapacity gets the DeliveryServiceCapacity for the ID it's passed
-// Deprecated: use GetDeliveryServiceCapacity
-func (to *Session) DeliveryServiceCapacity(id string) (*tc.DeliveryServiceCapacity, error) {
-	dsc, _, err := to.GetDeliveryServiceCapacity(id)
-	return dsc, err
-}
-
-func (to *Session) GetDeliveryServiceCapacity(id string) (*tc.DeliveryServiceCapacity, ReqInf, error) {
-	var data tc.DeliveryServiceCapacityResponse
-	reqInf, err := get(to, deliveryServiceCapacityEp(id), &data)
-	if err != nil {
-		return nil, reqInf, err
-	}
-
-	return &data.Response, reqInf, nil
-}
-
-// DeliveryServiceRouting gets the DeliveryServiceRouting for the ID it's passed
-// Deprecated: use GetDeliveryServiceRouting
-func (to *Session) DeliveryServiceRouting(id string) (*tc.DeliveryServiceRouting, error) {
-	dsr, _, err := to.GetDeliveryServiceRouting(id)
-	return dsr, err
-}
-
-func (to *Session) GetDeliveryServiceRouting(id string) (*tc.DeliveryServiceRouting, ReqInf, error) {
-	var data tc.DeliveryServiceRoutingResponse
-	reqInf, err := get(to, deliveryServiceRoutingEp(id), &data)
-	if err != nil {
-		return nil, reqInf, err
-	}
-
-	return &data.Response, reqInf, nil
-}
-
-// DeliveryServiceServer gets the DeliveryServiceServer
-// Deprecated: use GetDeliveryServiceServer
-func (to *Session) DeliveryServiceServer(page, limit string) ([]tc.DeliveryServiceServer, error) {
-	dss, _, err := to.GetDeliveryServiceServer(page, limit)
-	return dss, err
-}
-
-func (to *Session) GetDeliveryServiceServer(page, limit string) ([]tc.DeliveryServiceServer, ReqInf, error) {
-	var data tc.DeliveryServiceServerResponse
-	reqInf, err := get(to, deliveryServiceServerEp(page, limit), &data)
-	if err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// DeliveryServiceRegexes gets the DeliveryService regexes
-// Deprecated: use GetDeliveryServiceRegexes
-func (to *Session) DeliveryServiceRegexes() ([]tc.DeliveryServiceRegexes, error) {
-	dsrs, _, err := to.GetDeliveryServiceRegexes()
-	return dsrs, err
-}
-func (to *Session) GetDeliveryServiceRegexes() ([]tc.DeliveryServiceRegexes, ReqInf, error) {
-	var data tc.DeliveryServiceRegexResponse
-	reqInf, err := get(to, deliveryServiceRegexesEp(), &data)
-	if err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// DeliveryServiceSSLKeysByID gets the DeliveryServiceSSLKeys by ID
-// Deprecated: use GetDeliveryServiceSSLKeysByID
-func (to *Session) DeliveryServiceSSLKeysByID(id string) (*tc.DeliveryServiceSSLKeys, error) {
-	dsks, _, err := to.GetDeliveryServiceSSLKeysByID(id)
-	return dsks, err
-}
-
-func (to *Session) GetDeliveryServiceSSLKeysByID(id string) (*tc.DeliveryServiceSSLKeys, ReqInf, error) {
-	var data tc.DeliveryServiceSSLKeysResponse
-	reqInf, err := get(to, deliveryServiceSSLKeysByIDEp(id), &data)
-	if err != nil {
-		return nil, reqInf, err
-	}
-
-	return &data.Response, reqInf, nil
-}
-
-// DeliveryServiceSSLKeysByHostname gets the DeliveryServiceSSLKeys by Hostname
-// Deprecated: use GetDeliveryServiceSSLKeysByHostname
-func (to *Session) DeliveryServiceSSLKeysByHostname(hostname string) (*tc.DeliveryServiceSSLKeys, error) {
-	dsks, _, err := to.GetDeliveryServiceSSLKeysByHostname(hostname)
-	return dsks, err
-}
-
-func (to *Session) GetDeliveryServiceSSLKeysByHostname(hostname string) (*tc.DeliveryServiceSSLKeys, ReqInf, error) {
-	var data tc.DeliveryServiceSSLKeysResponse
-	reqInf, err := get(to, deliveryServiceSSLKeysByHostnameEp(hostname), &data)
-	if err != nil {
-		return nil, reqInf, err
-	}
-
-	return &data.Response, reqInf, nil
-}
-
-func (to *Session) GetDeliveryServiceMatches() ([]tc.DeliveryServicePatterns, ReqInf, error) {
-	uri := apiBase + `/deliveryservice_matches`
-	resp := tc.DeliveryServiceMatchesResponse{}
-	reqInf, err := get(to, uri, &resp)
-	if err != nil {
-		return nil, reqInf, err
-	}
-	return resp.Response, reqInf, nil
-}
-
-func (to *Session) GetDeliveryServicesEligible(dsID int) ([]tc.DSServer, ReqInf, error) {
-	resp := struct {
-		Response []tc.DSServer `json:"response"`
-	}{Response: []tc.DSServer{}}
-	uri := apiBase + `/deliveryservices/` + strconv.Itoa(dsID) + `/servers/eligible`
-	reqInf, err := get(to, uri, &resp)
-	if err != nil {
-		return nil, reqInf, err
-	}
-	return resp.Response, reqInf, nil
-}
diff --git a/traffic_ops/client/v13/deliveryservice_endpoints.go b/traffic_ops/client/v13/deliveryservice_endpoints.go
deleted file mode 100644
index ada751712..000000000
--- a/traffic_ops/client/v13/deliveryservice_endpoints.go
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-package v13
-
-const dsPath = "/deliveryservices"
-
-func deliveryServicesEp() string {
-	return apiBase + dsPath + ".json"
-}
-
-func deliveryServicesByServerEp(id string) string {
-	return apiBase + "/servers/" + id + dsPath + ".json"
-}
-
-func deliveryServiceBaseEp(id string) string {
-	return apiBase + dsPath + "/" + id
-}
-
-func deliveryServiceEp(id string) string {
-	return deliveryServiceBaseEp(id) + ".json"
-}
-
-func deliveryServiceStateEp(id string) string {
-	return deliveryServiceBaseEp(id) + "/state.json"
-}
-
-func deliveryServiceHealthEp(id string) string {
-	return deliveryServiceBaseEp(id) + "/health.json"
-}
-
-func deliveryServiceCapacityEp(id string) string {
-	return deliveryServiceBaseEp(id) + "/capacity.json"
-}
-
-func deliveryServiceRoutingEp(id string) string {
-	return deliveryServiceBaseEp(id) + "/routing.json"
-}
-
-func deliveryServiceServerEp(page, limit string) string {
-	return apiBase + "/deliveryserviceserver.json?page=" + page + "&limit=" + limit
-}
-
-func deliveryServiceRegexesEp() string {
-	return apiBase + "/deliveryservices_regexes.json"
-}
-
-func deliveryServiceSSLKeysByIDEp(id string) string {
-	return apiBase + dsPath + "/xmlId/" + id + "/sslkeys.json"
-}
-
-func deliveryServiceSSLKeysByHostnameEp(hostname string) string {
-	return apiBase + dsPath + "/hostname/" + hostname + "/sslkeys.json"
-}
-
-func deliveryServicesByXMLID(XMLID string) string {
-	return apiBase + dsPath + "?xmlId=" + XMLID
-}
diff --git a/traffic_ops/client/v13/dsuser.go b/traffic_ops/client/v13/dsuser.go
deleted file mode 100644
index 01bde1bb3..000000000
--- a/traffic_ops/client/v13/dsuser.go
+++ /dev/null
@@ -1,60 +0,0 @@
-package v13
-
-/*
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-import (
-	"encoding/json"
-	"strconv"
-
-	tc "github.com/apache/trafficcontrol/lib/go-tc"
-)
-
-// GetUserDeliveryServices gets the delivery services associated with the given user.
-func (to *Session) GetUserDeliveryServices(userID int) (*tc.UserDeliveryServicesResponse, ReqInf, error) {
-	uri := apiBase + `/users/` + strconv.Itoa(userID) + `/deliveryservices`
-	resp := tc.UserDeliveryServicesResponse{}
-	reqInf, err := get(to, uri, &resp)
-	if err != nil {
-		return nil, reqInf, err
-	}
-	return &resp, reqInf, nil
-}
-
-// SetUserDeliveryService associates the given delivery services with the given user.
-func (to *Session) SetDeliveryServiceUser(userID int, dses []int, replace bool) (*tc.UserDeliveryServicePostResponse, error) {
-	uri := apiBase + `/deliveryservice_user`
-	ds := tc.DeliveryServiceUserPost{UserID: &userID, DeliveryServices: &dses, Replace: &replace}
-	jsonReq, err := json.Marshal(ds)
-	if err != nil {
-		return nil, err
-	}
-	resp := tc.UserDeliveryServicePostResponse{}
-	err = post(to, uri, jsonReq, &resp)
-	if err != nil {
-		return nil, err
-	}
-	return &resp, nil
-}
-
-// DeleteDeliveryServiceUser deletes the association between the given delivery service and user
-func (to *Session) DeleteDeliveryServiceUser(userID int, dsID int) (*tc.UserDeliveryServiceDeleteResponse, error) {
-	uri := apiBase + `/deliveryservice_user/` + strconv.Itoa(dsID) + `/` + strconv.Itoa(userID)
-	resp := tc.UserDeliveryServiceDeleteResponse{}
-	if err := del(to, uri, &resp); err != nil {
-		return nil, err
-	}
-	return &resp, nil
-}
diff --git a/traffic_ops/client/v13/endpoints.go b/traffic_ops/client/v13/endpoints.go
deleted file mode 100644
index 8b1e7ed5f..000000000
--- a/traffic_ops/client/v13/endpoints.go
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-package v13
-
-const apiBase = "/api/1.3"
diff --git a/traffic_ops/client/v13/parameter.go b/traffic_ops/client/v13/parameter.go
deleted file mode 100644
index 34e94ab12..000000000
--- a/traffic_ops/client/v13/parameter.go
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-package v13
-
-import (
-	"encoding/json"
-	"fmt"
-	"net"
-	"net/http"
-	"net/url"
-
-	"github.com/apache/trafficcontrol/lib/go-tc"
-)
-
-const (
-	API_v13_Parameters = "/api/1.3/parameters"
-)
-
-// Create a Parameter
-func (to *Session) CreateParameter(pl tc.Parameter) (tc.Alerts, ReqInf, error) {
-
-	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(pl)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_Parameters, reqBody)
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
-
-// Update a Parameter by ID
-func (to *Session) UpdateParameterByID(id int, pl tc.Parameter) (tc.Alerts, ReqInf, error) {
-
-	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(pl)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	route := fmt.Sprintf("%s/%d", API_v13_Parameters, id)
-	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
-
-// Returns a list of Parameters
-func (to *Session) GetParameters() ([]tc.Parameter, ReqInf, error) {
-	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_Parameters, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data tc.ParametersResponse
-	err = json.NewDecoder(resp.Body).Decode(&data)
-	return data.Response, reqInf, nil
-}
-
-func (to *Session) GetParametersByProfileName(profileName string) ([]tc.Parameter, ReqInf, error) {
-	url := fmt.Sprintf(API_v13_Parameters + "/profile/%s.json", profileName)
-	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data tc.ParametersResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// GET a Parameter by the Parameter ID
-func (to *Session) GetParameterByID(id int) ([]tc.Parameter, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v13_Parameters, id)
-	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data tc.ParametersResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// GET a Parameter by the Parameter name
-func (to *Session) GetParameterByName(name string) ([]tc.Parameter, ReqInf, error) {
-	URI := API_v13_Parameters + "?name=" + url.QueryEscape(name)
-	resp, remoteAddr, err := to.request(http.MethodGet, URI, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data tc.ParametersResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// GET a Parameter by the Parameter ConfigFile
-func (to *Session) GetParameterByConfigFile(configFile string) ([]tc.Parameter, ReqInf, error) {
-	URI := API_v13_Parameters + "?configFile=" + url.QueryEscape(configFile)
-	resp, remoteAddr, err := to.request(http.MethodGet, URI, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data tc.ParametersResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// GET a Parameter by the Parameter Name and ConfigFile
-func (to *Session) GetParameterByNameAndConfigFile(name string, configFile string) ([]tc.Parameter, ReqInf, error) {
-	URI := fmt.Sprintf("%s?name=%s&configFile=%s", API_v13_Parameters, url.QueryEscape(name), url.QueryEscape(configFile))
-	resp, remoteAddr, err := to.request(http.MethodGet, URI, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data tc.ParametersResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// DELETE a Parameter by ID
-func (to *Session) DeleteParameterByID(id int) (tc.Alerts, ReqInf, error) {
-	URI := fmt.Sprintf("%s/%d", API_v13_Parameters, id)
-	resp, remoteAddr, err := to.request(http.MethodDelete, URI, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
diff --git a/traffic_ops/client/v13/phys_location.go b/traffic_ops/client/v13/phys_location.go
deleted file mode 100644
index 36fbf3213..000000000
--- a/traffic_ops/client/v13/phys_location.go
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-package v13
-
-import (
-	"encoding/json"
-	"fmt"
-	"net"
-	"net/http"
-
-	"github.com/apache/trafficcontrol/lib/go-tc"
-)
-
-const (
-	API_v13_PhysLocations = "/api/1.3/phys_locations"
-)
-
-// Create a PhysLocation
-func (to *Session) CreatePhysLocation(pl tc.PhysLocation) (tc.Alerts, ReqInf, error) {
-
-	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(pl)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_PhysLocations, reqBody)
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
-
-// Update a PhysLocation by ID
-func (to *Session) UpdatePhysLocationByID(id int, pl tc.PhysLocation) (tc.Alerts, ReqInf, error) {
-
-	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(pl)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	route := fmt.Sprintf("%s/%d", API_v13_PhysLocations, id)
-	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
-
-// Returns a list of PhysLocations
-func (to *Session) GetPhysLocations() ([]tc.PhysLocation, ReqInf, error) {
-	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_PhysLocations, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data tc.PhysLocationsResponse
-	err = json.NewDecoder(resp.Body).Decode(&data)
-	return data.Response, reqInf, nil
-}
-
-// GET a PhysLocation by the PhysLocation ID
-func (to *Session) GetPhysLocationByID(id int) ([]tc.PhysLocation, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v13_PhysLocations, id)
-	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data tc.PhysLocationsResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// GET a PhysLocation by the PhysLocation name
-func (to *Session) GetPhysLocationByName(name string) ([]tc.PhysLocation, ReqInf, error) {
-	url := fmt.Sprintf("%s?name=%s", API_v13_PhysLocations, name)
-	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data tc.PhysLocationsResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// DELETE a PhysLocation by ID
-func (to *Session) DeletePhysLocationByID(id int) (tc.Alerts, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v13_PhysLocations, id)
-	resp, remoteAddr, err := to.request(http.MethodDelete, route, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
diff --git a/traffic_ops/client/v13/profile.go b/traffic_ops/client/v13/profile.go
deleted file mode 100644
index 066690bb6..000000000
--- a/traffic_ops/client/v13/profile.go
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-package v13
-
-import (
-	"encoding/json"
-	"fmt"
-	"net"
-	"net/http"
-	"net/url"
-	"strconv"
-
-	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
-)
-
-const (
-	API_v13_Profiles = "/api/1.3/profiles"
-)
-
-// Create a Profile
-func (to *Session) CreateProfile(pl v13.Profile) (tc.Alerts, ReqInf, error) {
-
-	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(pl)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_Profiles, reqBody)
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
-
-// Update a Profile by ID
-func (to *Session) UpdateProfileByID(id int, pl v13.Profile) (tc.Alerts, ReqInf, error) {
-
-	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(pl)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	route := fmt.Sprintf("%s/%d", API_v13_Profiles, id)
-	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
-
-// Returns a list of Profiles
-func (to *Session) GetProfiles() ([]v13.Profile, ReqInf, error) {
-	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_Profiles, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.ProfilesResponse
-	err = json.NewDecoder(resp.Body).Decode(&data)
-	return data.Response, reqInf, nil
-}
-
-// GET a Profile by the Profile ID
-func (to *Session) GetProfileByID(id int) ([]v13.Profile, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v13_Profiles, id)
-	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.ProfilesResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// GET a Profile by the Profile name
-func (to *Session) GetProfileByName(name string) ([]v13.Profile, ReqInf, error) {
-	URI := API_v13_Profiles + "?name=" + url.QueryEscape(name)
-	resp, remoteAddr, err := to.request(http.MethodGet, URI, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.ProfilesResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// GET a Profile by the Profile "param"
-func (to *Session) GetProfileByParameter(param string) ([]v13.Profile, ReqInf, error) {
-	URI := API_v13_Profiles + "?param=" + url.QueryEscape(param)
-	resp, remoteAddr, err := to.request(http.MethodGet, URI, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.ProfilesResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// GET a Profile by the Profile cdn id
-func (to *Session) GetProfileByCDNID(cdnID int) ([]v13.Profile, ReqInf, error) {
-	URI := API_v13_Profiles + "?cdn=" + strconv.Itoa(cdnID)
-	resp, remoteAddr, err := to.request(http.MethodGet, URI, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.ProfilesResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// DELETE a Profile by ID
-func (to *Session) DeleteProfileByID(id int) (tc.Alerts, ReqInf, error) {
-	URI := fmt.Sprintf("%s/%d", API_v13_Profiles, id)
-	resp, remoteAddr, err := to.request(http.MethodDelete, URI, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
diff --git a/traffic_ops/client/v13/server.go b/traffic_ops/client/v13/server.go
deleted file mode 100644
index 74b0f5a89..000000000
--- a/traffic_ops/client/v13/server.go
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-package v13
-
-import (
-	"encoding/json"
-	"fmt"
-	"net"
-	"net/http"
-
-	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
-	"net/url"
-)
-
-const (
-	API_v13_Servers = "/api/1.3/servers"
-)
-
-// Create a Server
-func (to *Session) CreateServer(server v13.Server) (tc.Alerts, ReqInf, error) {
-
-	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(server)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_Servers, reqBody)
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
-
-// Update a Server by ID
-func (to *Session) UpdateServerByID(id int, server v13.Server) (tc.Alerts, ReqInf, error) {
-
-	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(server)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	route := fmt.Sprintf("%s/%d", API_v13_Servers, id)
-	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
-
-// Returns a list of Servers
-func (to *Session) GetServers() ([]v13.Server, ReqInf, error) {
-	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_Servers, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.ServersResponse
-	err = json.NewDecoder(resp.Body).Decode(&data)
-	return data.Response, reqInf, nil
-}
-
-// GET a Server by the Server ID
-func (to *Session) GetServerByID(id int) ([]v13.Server, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v13_Servers, id)
-	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.ServersResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// GET a Server by the Server hostname
-func (to *Session) GetServerByHostName(hostName string) ([]v13.Server, ReqInf, error) {
-	url := fmt.Sprintf("%s?hostName=%s", API_v13_Servers, hostName)
-	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.ServersResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// DELETE a Server by ID
-func (to *Session) DeleteServerByID(id int) (tc.Alerts, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v13_Servers, id)
-	resp, remoteAddr, err := to.request(http.MethodDelete, route, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
-
-func (to *Session) GetServersByType(qparams url.Values) ([]v13.Server, ReqInf, error) {
-	url := fmt.Sprintf("%s.json?%s", API_v13_Servers, qparams.Encode())
-	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data v13.ServersResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
diff --git a/traffic_ops/client/v13/session.go b/traffic_ops/client/v13/session.go
deleted file mode 100644
index 7634941fe..000000000
--- a/traffic_ops/client/v13/session.go
+++ /dev/null
@@ -1,426 +0,0 @@
-/*
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-package v13
-
-import (
-	"bytes"
-	"crypto/tls"
-	"encoding/json"
-	"errors"
-	"fmt"
-	"io/ioutil"
-	"net"
-	"net/http"
-	"net/http/cookiejar"
-	"net/http/httptrace"
-	"strconv"
-	"strings"
-	"sync"
-	"time"
-
-	tc "github.com/apache/trafficcontrol/lib/go-tc"
-
-	"golang.org/x/net/publicsuffix"
-)
-
-// Session ...
-type Session struct {
-	UserName     string
-	Password     string
-	URL          string
-	Client       *http.Client
-	cache        map[string]CacheEntry
-	cacheMutex   *sync.RWMutex
-	useCache     bool
-	UserAgentStr string
-}
-
-func NewSession(user, password, url, userAgent string, client *http.Client, useCache bool) *Session {
-	return &Session{
-		UserName:     user,
-		Password:     password,
-		URL:          url,
-		Client:       client,
-		cache:        map[string]CacheEntry{},
-		cacheMutex:   &sync.RWMutex{},
-		useCache:     useCache,
-		UserAgentStr: userAgent,
-	}
-}
-
-const DefaultTimeout = time.Second * time.Duration(30)
-
-// HTTPError is returned on Update Session failure.
-type HTTPError struct {
-	HTTPStatusCode int
-	HTTPStatus     string
-	URL            string
-	Body           string
-}
-
-// Error implements the error interface for our customer error type.
-func (e *HTTPError) Error() string {
-	return fmt.Sprintf("%s[%d] - Error requesting Traffic Ops %s %s", e.HTTPStatus, e.HTTPStatusCode, e.URL, e.Body)
-}
-
-// CacheEntry ...
-type CacheEntry struct {
-	Entered    int64
-	Bytes      []byte
-	RemoteAddr net.Addr
-}
-
-// TODO JvD
-const tmPollingInterval = 60
-
-// loginCreds gathers login credentials for Traffic Ops.
-func loginCreds(toUser string, toPasswd string) ([]byte, error) {
-	credentials := tc.UserCredentials{
-		Username: toUser,
-		Password: toPasswd,
-	}
-
-	js, err := json.Marshal(credentials)
-	if err != nil {
-		err := fmt.Errorf("Error creating login json: %v", err)
-		return nil, err
-	}
-	return js, nil
-}
-
-// Deprecated: Login is deprecated, use LoginWithAgent instead. The `Login` function with its present signature will be removed in the next version and replaced with `Login(toURL string, toUser string, toPasswd string, insecure bool, userAgent string)`. The `LoginWithAgent` function will be removed the version after that.
-func Login(toURL string, toUser string, toPasswd string, insecure bool) (*Session, error) {
-	s, _, err := LoginWithAgent(toURL, toUser, toPasswd, insecure, "traffic-ops-client", false, DefaultTimeout)
-	return s, err
-}
-
-// login tries to log in to Traffic Ops, and set the auth cookie in the Session. Returns the IP address of the remote Traffic Ops.
-func (to *Session) login() (net.Addr, error) {
-	credentials, err := loginCreds(to.UserName, to.Password)
-	if err != nil {
-		return nil, errors.New("creating login credentials: " + err.Error())
-	}
-
-	path := apiBase + "/user/login"
-	resp, remoteAddr, err := to.rawRequest("POST", path, credentials)
-	resp, remoteAddr, err = to.ErrUnlessOK(resp, remoteAddr, err, path)
-	if err != nil {
-		return remoteAddr, errors.New("requesting: " + err.Error())
-	}
-	defer resp.Body.Close()
-
-	var alerts tc.Alerts
-	if err := json.NewDecoder(resp.Body).Decode(&alerts); err != nil {
-		return remoteAddr, errors.New("decoding response JSON: " + err.Error())
-	}
-
-	success := false
-	for _, alert := range alerts.Alerts {
-		if alert.Level == "success" && alert.Text == "Successfully logged in." {
-			success = true
-			break
-		}
-	}
-
-	if !success {
-		return remoteAddr, fmt.Errorf("Login failed, alerts string: %+v", alerts)
-	}
-
-	return remoteAddr, nil
-}
-
-// logout of Traffic Ops
-func (to *Session) logout() (net.Addr, error) {
-	credentials, err := loginCreds(to.UserName, to.Password)
-	if err != nil {
-		return nil, errors.New("creating login credentials: " + err.Error())
-	}
-
-	path := apiBase + "/user/logout"
-	resp, remoteAddr, err := to.rawRequest("POST", path, credentials)
-	resp, remoteAddr, err = to.ErrUnlessOK(resp, remoteAddr, err, path)
-	if err != nil {
-		return remoteAddr, errors.New("requesting: " + err.Error())
-	}
-	defer resp.Body.Close()
-
-	var alerts tc.Alerts
-	if err := json.NewDecoder(resp.Body).Decode(&alerts); err != nil {
-		return remoteAddr, errors.New("decoding response JSON: " + err.Error())
-	}
-
-	success := false
-	for _, alert := range alerts.Alerts {
-		if alert.Level == "success" && alert.Text == "Successfully logged in." {
-			success = true
-			break
-		}
-	}
-
-	if !success {
-		return remoteAddr, fmt.Errorf("Logout failed, alerts string: %+v", alerts)
-	}
-
-	return remoteAddr, nil
-}
-
-// Login to traffic_ops, the response should set the cookie for this session
-// automatically. Start with
-//     to := traffic_ops.Login("user", "passwd", true)
-// subsequent calls like to.GetData("datadeliveryservice") will be authenticated.
-// Returns the logged in client, the remote address of Traffic Ops which was translated and used to log in, and any error. If the error is not nil, the remote address may or may not be nil, depending whether the error occurred before the login request.
-func LoginWithAgent(toURL string, toUser string, toPasswd string, insecure bool, userAgent string, useCache bool, requestTimeout time.Duration) (*Session, net.Addr, error) {
-	options := cookiejar.Options{
-		PublicSuffixList: publicsuffix.List,
-	}
-
-	jar, err := cookiejar.New(&options)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	to := NewSession(toUser, toPasswd, toURL, userAgent, &http.Client{
-		Timeout: requestTimeout,
-		Transport: &http.Transport{
-			TLSClientConfig: &tls.Config{InsecureSkipVerify: insecure},
-		},
-		Jar: jar,
-	}, useCache)
-
-	remoteAddr, err := to.login()
-	if err != nil {
-		return nil, remoteAddr, errors.New("logging in: " + err.Error())
-	}
-	return to, remoteAddr, nil
-}
-
-// Logout of traffic_ops
-func LogoutWithAgent(toURL string, toUser string, toPasswd string, insecure bool, userAgent string, useCache bool, requestTimeout time.Duration) (*Session, net.Addr, error) {
-	options := cookiejar.Options{
-		PublicSuffixList: publicsuffix.List,
-	}
-
-	jar, err := cookiejar.New(&options)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	to := NewSession(toUser, toPasswd, toURL, userAgent, &http.Client{
-		Timeout: requestTimeout,
-		Transport: &http.Transport{
-			TLSClientConfig: &tls.Config{InsecureSkipVerify: insecure},
-		},
-		Jar: jar,
-	}, useCache)
-
-	remoteAddr, err := to.logout()
-	if err != nil {
-		return nil, remoteAddr, errors.New("logging out: " + err.Error())
-	}
-	return to, remoteAddr, nil
-}
-
-// NewNoAuthSession returns a new Session without logging in
-// this can be used for querying unauthenticated endpoints without requiring a login
-func NewNoAuthSession(toURL string, insecure bool, userAgent string, useCache bool, requestTimeout time.Duration) *Session {
-	return NewSession("", "", toURL, userAgent, &http.Client{
-		Timeout: requestTimeout,
-		Transport: &http.Transport{
-			TLSClientConfig: &tls.Config{InsecureSkipVerify: insecure},
-		},
-	}, useCache)
-}
-
-// ErrUnlessOk returns nil and an error if the given Response's status code is anything but 200 OK. This includes reading the Response.Body and Closing it. Otherwise, the given response and error are returned unchanged.
-func (to *Session) ErrUnlessOK(resp *http.Response, remoteAddr net.Addr, err error, path string) (*http.Response, net.Addr, error) {
-	if err != nil {
-		return resp, remoteAddr, err
-	}
-	if resp.StatusCode == http.StatusOK {
-		return resp, remoteAddr, err
-	}
-
-	defer resp.Body.Close()
-	body, readErr := ioutil.ReadAll(resp.Body)
-	if readErr != nil {
-		return nil, remoteAddr, readErr
-	}
-	return nil, remoteAddr, errors.New(resp.Status + "[" + strconv.Itoa(resp.StatusCode) + "] - Error requesting Traffic Ops " + to.getURL(path) + " " + string(body))
-}
-
-func (to *Session) getURL(path string) string { return to.URL + path }
-
-// request performs the HTTP request to Traffic Ops, trying to refresh the cookie if an Unauthorized or Forbidden code is received. It only tries once. If the login fails, the original Unauthorized/Forbidden response is returned. If the login succeeds and the subsequent re-request fails, the re-request's response is returned even if it's another Unauthorized/Forbidden.
-func (to *Session) request(method, path string, body []byte) (*http.Response, net.Addr, error) {
-	r, remoteAddr, err := to.rawRequest(method, path, body)
-	if err != nil {
-		return r, remoteAddr, err
-	}
-	if r.StatusCode != http.StatusUnauthorized && r.StatusCode != http.StatusForbidden {
-		return to.ErrUnlessOK(r, remoteAddr, err, path)
-	}
-	if _, lerr := to.login(); lerr != nil {
-		return to.ErrUnlessOK(r, remoteAddr, err, path) // if re-logging-in fails, return the original request's response
-	}
-
-	// return second request, even if it's another Unauthorized or Forbidden.
-	r, remoteAddr, err = to.rawRequest(method, path, body)
-	return to.ErrUnlessOK(r, remoteAddr, err, path)
-}
-
-// rawRequest performs the actual HTTP request to Traffic Ops, simply, without trying to refresh the cookie if an Unauthorized code is returned.
-func (to *Session) rawRequest(method, path string, body []byte) (*http.Response, net.Addr, error) {
-	url := to.getURL(path)
-
-	var req *http.Request
-	var err error
-	remoteAddr := net.Addr(nil)
-
-	if body != nil {
-		req, err = http.NewRequest(method, url, bytes.NewBuffer(body))
-		if err != nil {
-			return nil, remoteAddr, err
-		}
-		req.Header.Set("Content-Type", "application/json")
-	} else {
-		req, err = http.NewRequest(method, url, nil)
-		if err != nil {
-			return nil, remoteAddr, err
-		}
-	}
-
-	trace := &httptrace.ClientTrace{
-		GotConn: func(connInfo httptrace.GotConnInfo) {
-			remoteAddr = connInfo.Conn.RemoteAddr()
-		},
-	}
-	req = req.WithContext(httptrace.WithClientTrace(req.Context(), trace))
-
-	req.Header.Set("User-Agent", to.UserAgentStr)
-
-	resp, err := to.Client.Do(req)
-	if err != nil {
-		return nil, remoteAddr, err
-	}
-
-	return resp, remoteAddr, nil
-}
-
-type ReqInf struct {
-	CacheHitStatus CacheHitStatus
-	RemoteAddr     net.Addr
-}
-
-type CacheHitStatus string
-
-const CacheHitStatusHit = CacheHitStatus("hit")
-const CacheHitStatusExpired = CacheHitStatus("expired")
-const CacheHitStatusMiss = CacheHitStatus("miss")
-const CacheHitStatusInvalid = CacheHitStatus("")
-
-func (s CacheHitStatus) String() string {
-	return string(s)
-}
-
-func StringToCacheHitStatus(s string) CacheHitStatus {
-	s = strings.ToLower(s)
-	switch s {
-	case "hit":
-		return CacheHitStatusHit
-	case "expired":
-		return CacheHitStatusExpired
-	case "miss":
-		return CacheHitStatusMiss
-	default:
-		return CacheHitStatusInvalid
-	}
-}
-
-// setCache Sets the given cache key and value. This is threadsafe for multiple goroutines.
-func (to *Session) setCache(path string, entry CacheEntry) {
-	if !to.useCache {
-		return
-	}
-	to.cacheMutex.Lock()
-	defer to.cacheMutex.Unlock()
-	to.cache[path] = entry
-}
-
-// getCache gets the cache value at the given key, or false if it doesn't exist. This is threadsafe for multiple goroutines.
-func (to *Session) getCache(path string) (CacheEntry, bool) {
-	to.cacheMutex.RLock()
-	defer to.cacheMutex.RUnlock()
-	cacheEntry, ok := to.cache[path]
-	return cacheEntry, ok
-}
-
-//if cacheEntry, ok := to.Cache[path]; ok {
-
-// getBytesWithTTL gets the path, and caches in the session. Returns bytes from the cache, if found and the TTL isn't expired. Otherwise, gets it and store it in cache
-func (to *Session) getBytesWithTTL(path string, ttl int64) ([]byte, ReqInf, error) {
-	var body []byte
-	var err error
-	var cacheHitStatus CacheHitStatus
-	var remoteAddr net.Addr
-
-	getFresh := false
-	if cacheEntry, ok := to.getCache(path); ok {
-		if cacheEntry.Entered > time.Now().Unix()-ttl {
-			cacheHitStatus = CacheHitStatusHit
-			body = cacheEntry.Bytes
-			remoteAddr = cacheEntry.RemoteAddr
-		} else {
-			cacheHitStatus = CacheHitStatusExpired
-			getFresh = true
-		}
-	} else {
-		cacheHitStatus = CacheHitStatusMiss
-		getFresh = true
-	}
-
-	if getFresh {
-		body, remoteAddr, err = to.getBytes(path)
-		if err != nil {
-			return nil, ReqInf{CacheHitStatus: CacheHitStatusInvalid, RemoteAddr: remoteAddr}, err
-		}
-
-		newEntry := CacheEntry{
-			Entered:    time.Now().Unix(),
-			Bytes:      body,
-			RemoteAddr: remoteAddr,
-		}
-		to.setCache(path, newEntry)
-	}
-
-	return body, ReqInf{CacheHitStatus: cacheHitStatus, RemoteAddr: remoteAddr}, nil
-}
-
-// GetBytes - get []bytes array for a certain path on the to session.
-// returns the raw body, the remote address the Traffic Ops URL resolved to, or any error. If the error is not nil, the RemoteAddr may or may not be nil, depending whether the error occurred before the request was executed.
-func (to *Session) getBytes(path string) ([]byte, net.Addr, error) {
-	resp, remoteAddr, err := to.request("GET", path, nil)
-	if err != nil {
-		return nil, remoteAddr, err
-	}
-	defer resp.Body.Close()
-
-	body, err := ioutil.ReadAll(resp.Body)
-	if err != nil {
-		return nil, remoteAddr, err
-	}
-
-	return body, remoteAddr, nil
-}
diff --git a/traffic_ops/client/v13/tenant.go b/traffic_ops/client/v13/tenant.go
deleted file mode 100644
index 480a06ca6..000000000
--- a/traffic_ops/client/v13/tenant.go
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-package v13
-
-import (
-	"encoding/json"
-	"errors"
-	"net/url"
-
-	tc "github.com/apache/trafficcontrol/lib/go-tc"
-)
-
-// Tenants gets an array of Tenants
-func (to *Session) Tenants() ([]tc.Tenant, ReqInf, error) {
-	var data tc.GetTenantsResponse
-	reqInf, err := get(to, tenantsEp(), &data)
-	if err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// Tenant gets the Tenant for the ID it's passed
-func (to *Session) Tenant(id string) (*tc.Tenant, ReqInf, error) {
-	var data tc.GetTenantsResponse
-	reqInf, err := get(to, tenantEp(id), &data)
-	if err != nil {
-		return nil, reqInf, err
-	}
-
-	return &data.Response[0], reqInf, nil
-}
-
-// TenantByName gets the Tenant for the name it's passed
-func (to *Session) TenantByName(name string) (*tc.Tenant, ReqInf, error) {
-	var data tc.GetTenantsResponse
-	query := tenantsEp() + "?name=" + url.QueryEscape(name)
-	reqInf, err := get(to, query, &data)
-	if err != nil {
-		return nil, reqInf, err
-	}
-
-	var ten *tc.Tenant
-	if len(data.Response) > 0 {
-		ten = &data.Response[0]
-	} else {
-		err = errors.New("no tenant found with name " + name)
-	}
-	return ten, reqInf, err
-}
-
-// CreateTenant creates the Tenant it's passed
-func (to *Session) CreateTenant(t *tc.Tenant) (*tc.TenantResponse, error) {
-	var data tc.TenantResponse
-	jsonReq, err := json.Marshal(t)
-	if err != nil {
-		return nil, err
-	}
-	err = post(to, tenantsEp(), jsonReq, &data)
-	if err != nil {
-		return nil, err
-	}
-
-	return &data, nil
-}
-
-// UpdateTenant updates the Tenant matching the ID it's passed with
-// the Tenant it is passed
-func (to *Session) UpdateTenant(id string, t *tc.Tenant) (*tc.TenantResponse, error) {
-	var data tc.TenantResponse
-	jsonReq, err := json.Marshal(t)
-	if err != nil {
-		return nil, err
-	}
-	err = put(to, tenantEp(id), jsonReq, &data)
-	if err != nil {
-		return nil, err
-	}
-
-	return &data, nil
-}
-
-// DeleteTenant deletes the Tenant matching the ID it's passed
-func (to *Session) DeleteTenant(id string) (*tc.DeleteTenantResponse, error) {
-	var data tc.DeleteTenantResponse
-	err := del(to, tenantEp(id), &data)
-	if err != nil {
-		return nil, err
-	}
-
-	return &data, nil
-}
diff --git a/traffic_ops/client/v13/tenant_endpoints.go b/traffic_ops/client/v13/tenant_endpoints.go
deleted file mode 100644
index d3e2d35fc..000000000
--- a/traffic_ops/client/v13/tenant_endpoints.go
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-package v13
-
-const tenantPath = "/tenants"
-
-func tenantsEp() string {
-	return apiBase + tenantPath
-}
-
-func tenantEp(id string) string {
-	return apiBase + tenantPath + "/" + id
-}
diff --git a/traffic_ops/client/v13/traffic_monitor.go b/traffic_ops/client/v13/traffic_monitor.go
deleted file mode 100644
index dc97a44e6..000000000
--- a/traffic_ops/client/v13/traffic_monitor.go
+++ /dev/null
@@ -1,55 +0,0 @@
-package v13
-
-import (
-	"encoding/json"
-	"fmt"
-	"github.com/apache/trafficcontrol/lib/go-tc"
-)
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-func (to *Session) GetTrafficMonitorConfigMap(cdn string) (*tc.TrafficMonitorConfigMap, ReqInf, error) {
-	tmConfig, reqInf, err := to.GetTrafficMonitorConfig(cdn)
-	if err != nil {
-		return nil, reqInf, err
-	}
-	tmConfigMap, err := tc.TrafficMonitorTransformToMap(tmConfig)
-	if err != nil {
-		return nil, reqInf, err
-	}
-	return tmConfigMap, reqInf, nil
-}
-
-func (to *Session) GetTrafficMonitorConfig(cdn string) (*tc.TrafficMonitorConfig, ReqInf, error) {
-	url := fmt.Sprintf("/api/1.3/cdns/%s/configs/monitoring.json", cdn)
-	resp, remoteAddr, err := to.request("GET", url, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data tc.TMConfigResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return &data.Response, reqInf, nil
-}
diff --git a/traffic_ops/client/v13/type.go b/traffic_ops/client/v13/type.go
deleted file mode 100644
index 67e67f822..000000000
--- a/traffic_ops/client/v13/type.go
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-package v13
-
-import (
-	"encoding/json"
-	"fmt"
-	"net"
-	"net/http"
-
-	"github.com/apache/trafficcontrol/lib/go-tc"
-)
-
-const (
-	API_v13_Types = "/api/1.3/types"
-)
-
-// Create a Type
-func (to *Session) CreateType(typ tc.Type) (tc.Alerts, ReqInf, error) {
-
-	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(typ)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	resp, remoteAddr, err := to.request(http.MethodPost, API_v13_Types, reqBody)
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
-
-// Update a Type by ID
-func (to *Session) UpdateTypeByID(id int, typ tc.Type) (tc.Alerts, ReqInf, error) {
-
-	var remoteAddr net.Addr
-	reqBody, err := json.Marshal(typ)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	route := fmt.Sprintf("%s/%d", API_v13_Types, id)
-	resp, remoteAddr, err := to.request(http.MethodPut, route, reqBody)
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
-
-// Returns a list of Types
-func (to *Session) GetTypes() ([]tc.Type, ReqInf, error) {
-	resp, remoteAddr, err := to.request(http.MethodGet, API_v13_Types, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data tc.TypesResponse
-	err = json.NewDecoder(resp.Body).Decode(&data)
-	return data.Response, reqInf, nil
-}
-
-// GET a Type by the Type ID
-func (to *Session) GetTypeByID(id int) ([]tc.Type, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v13_Types, id)
-	resp, remoteAddr, err := to.request(http.MethodGet, route, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data tc.TypesResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// GET a Type by the Type name
-func (to *Session) GetTypeByName(name string) ([]tc.Type, ReqInf, error) {
-	url := fmt.Sprintf("%s?name=%s", API_v13_Types, name)
-	resp, remoteAddr, err := to.request(http.MethodGet, url, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data tc.TypesResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// DELETE a Type by ID
-func (to *Session) DeleteTypeByID(id int) (tc.Alerts, ReqInf, error) {
-	route := fmt.Sprintf("%s/%d", API_v13_Types, id)
-	resp, remoteAddr, err := to.request(http.MethodDelete, route, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return tc.Alerts{}, reqInf, err
-	}
-	defer resp.Body.Close()
-	var alerts tc.Alerts
-	err = json.NewDecoder(resp.Body).Decode(&alerts)
-	return alerts, reqInf, nil
-}
diff --git a/traffic_ops/client/v13/user.go b/traffic_ops/client/v13/user.go
deleted file mode 100644
index 33095242e..000000000
--- a/traffic_ops/client/v13/user.go
+++ /dev/null
@@ -1,57 +0,0 @@
-package v13
-
-/*
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-import (
-	"encoding/json"
-
-	"github.com/apache/trafficcontrol/lib/go-tc"
-)
-
-// Users gets an array of Users.
-// Deprecated: use GetUsers
-func (to *Session) Users() ([]tc.User, error) {
-	us, _, err := to.GetUsers()
-	return us, err
-}
-
-func (to *Session) GetUsers() ([]tc.User, ReqInf, error) {
-	url := apiBase + "/users.json"
-	resp, remoteAddr, err := to.request("GET", url, nil)
-	reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}
-	if err != nil {
-		return nil, reqInf, err
-	}
-	defer resp.Body.Close()
-
-	var data tc.UsersResponse
-	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
-		return nil, reqInf, err
-	}
-
-	return data.Response, reqInf, nil
-}
-
-// GetUserCurrent gets information about the current user
-func (to *Session) GetUserCurrent() (*tc.UserCurrent, ReqInf, error) {
-	url := apiBase + `/user/current`
-	resp := tc.UserCurrentResponse{}
-	reqInf, err := get(to, url, &resp)
-	if err != nil {
-		return nil, reqInf, err
-	}
-	return &resp.Response, reqInf, nil
-}
diff --git a/traffic_ops/client/v13/util.go b/traffic_ops/client/v13/util.go
deleted file mode 100644
index a3c05e338..000000000
--- a/traffic_ops/client/v13/util.go
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-package v13
-import (
-	"encoding/json"
-	"io/ioutil"
-	"errors"
-)
-
-func get(to *Session, endpoint string, respStruct interface{}) (ReqInf, error) {
-	return makeReq(to, "GET", endpoint, nil, respStruct)
-}
-
-func post(to *Session, endpoint string, body []byte, respStruct interface{}) error {
-	_, err := makeReq(to, "POST", endpoint, body, respStruct)
-	return err
-}
-
-func put(to *Session, endpoint string, body []byte, respStruct interface{}) error {
-	_, err := makeReq(to, "PUT", endpoint, body, respStruct)
-	return err
-}
-
-func del(to *Session, endpoint string, respStruct interface{}) error {
-	_, err := makeReq(to, "DELETE", endpoint, nil, respStruct)
-	return err
-}
-
-func makeReq(to *Session, method, endpoint string, body []byte, respStruct interface{}) (ReqInf, error) {
-	resp, remoteAddr, err := to.request(method, endpoint, body) // TODO change to getBytesWithTTL
-	reqInf := ReqInf{RemoteAddr: remoteAddr, CacheHitStatus: CacheHitStatusMiss}
-	if err != nil {
-		return reqInf, err
-	}
-	defer resp.Body.Close()
-
-	bts, err := ioutil.ReadAll(resp.Body)
-	if err != nil {
-		return reqInf, errors.New("reading body: " + err.Error())
-	}
-
-	if err := json.Unmarshal(bts, respStruct); err != nil {
-		return reqInf, errors.New("unmarshalling body '" + string(body) + "': " + err.Error())
-	}
-
-	// debug
-	// if err := json.NewDecoder(resp.Body).Decode(respStruct); err != nil {
-	// 	return reqInf, err
-	// }
-
-	return reqInf, nil
-}
diff --git a/traffic_ops/testing/api/v13/cachegroups_test.go b/traffic_ops/testing/api/v13/cachegroups_test.go
index 9891756a4..ea9e9e106 100644
--- a/traffic_ops/testing/api/v13/cachegroups_test.go
+++ b/traffic_ops/testing/api/v13/cachegroups_test.go
@@ -22,7 +22,6 @@ import (
 
 	"github.com/apache/trafficcontrol/lib/go-log"
 	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/traffic_ops/testing/api/utils"
 )
 
@@ -186,7 +185,7 @@ func UpdateTestCacheGroups(t *testing.T) {
 
 func DeleteTestCacheGroups(t *testing.T) {
 	failed := false
-	var mids []v13.CacheGroupNullable
+	var mids []tc.CacheGroupNullable
 
 	// delete the edge caches.
 	for _, cg := range testData.CacheGroups {
diff --git a/traffic_ops/testing/api/v13/deliveryservices_test.go b/traffic_ops/testing/api/v13/deliveryservices_test.go
index 9f93d6d02..13c4e0dae 100644
--- a/traffic_ops/testing/api/v13/deliveryservices_test.go
+++ b/traffic_ops/testing/api/v13/deliveryservices_test.go
@@ -113,7 +113,7 @@ func GetTestDeliveryServices(t *testing.T) {
 		t.Fatalf("cannot GET DeliveryServices: %v - %v\n", err, actualDSes)
 		failed = true
 	}
-	actualDSMap := map[string]tc.DeliveryServiceV13{}
+	actualDSMap := map[string]tc.DeliveryService{}
 	for _, ds := range actualDSes {
 		actualDSMap[ds.XMLID] = ds
 	}
@@ -138,7 +138,7 @@ func UpdateTestDeliveryServices(t *testing.T) {
 		t.Fatalf("cannot GET Delivery Services: %v\n", err)
 	}
 
-	remoteDS := tc.DeliveryServiceV13{}
+	remoteDS := tc.DeliveryService{}
 	found := false
 	for _, ds := range dses {
 		if ds.XMLID == firstDS.XMLID {
@@ -190,7 +190,7 @@ func DeleteTestDeliveryServices(t *testing.T) {
 		t.Fatalf("cannot GET Servers: %v\n", err)
 	}
 	for _, testDS := range testData.DeliveryServices {
-		ds := tc.DeliveryServiceV13{}
+		ds := tc.DeliveryService{}
 		found := false
 		for _, realDS := range dses {
 			if realDS.XMLID == testDS.XMLID {
diff --git a/traffic_ops/testing/api/v13/profile_parameters_test.go b/traffic_ops/testing/api/v13/profile_parameters_test.go
index 436cf39c1..b13613b0e 100644
--- a/traffic_ops/testing/api/v13/profile_parameters_test.go
+++ b/traffic_ops/testing/api/v13/profile_parameters_test.go
@@ -21,7 +21,7 @@ import (
 	"testing"
 
 	"github.com/apache/trafficcontrol/lib/go-log"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 )
 
 const queryParamFormat = "?profileId=%d&parameterId=%d"
@@ -59,7 +59,7 @@ func CreateTestProfileParameters(t *testing.T) {
 	profileID := profileResp[0].ID
 	parameterID := paramResp[0].ID
 
-	pp := v13.ProfileParameter{
+	pp := tc.ProfileParameter{
 		ProfileID:   profileID,
 		ParameterID: parameterID,
 	}
@@ -104,7 +104,7 @@ func DeleteTestProfileParameters(t *testing.T) {
 	}
 }
 
-func DeleteTestProfileParameter(t *testing.T, pp v13.ProfileParameter) {
+func DeleteTestProfileParameter(t *testing.T, pp tc.ProfileParameter) {
 
 	queryParams := fmt.Sprintf(queryParamFormat, pp.ProfileID, pp.ParameterID)
 	// Retrieve the PtofileParameter by profile so we can get the id for the Update
diff --git a/traffic_ops/testing/api/v13/profiles_test.go b/traffic_ops/testing/api/v13/profiles_test.go
index 5a3a8bc26..8ae19c9b4 100644
--- a/traffic_ops/testing/api/v13/profiles_test.go
+++ b/traffic_ops/testing/api/v13/profiles_test.go
@@ -20,7 +20,6 @@ import (
 
 	"github.com/apache/trafficcontrol/lib/go-log"
 	tc "github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 )
 
 func TestProfiles(t *testing.T) {
@@ -47,12 +46,12 @@ func TestProfiles(t *testing.T) {
 func CreateBadProfiles(t *testing.T) {
 
 	// blank profile
-	prs := []v13.Profile{
-		v13.Profile{Type: "", Name: "", Description: "", CDNID: 0},
-		v13.Profile{Type: "ATS_PROFILE", Name: "badprofile", Description: "description", CDNID: 0},
-		v13.Profile{Type: "ATS_PROFILE", Name: "badprofile", Description: "", CDNID: 1},
-		v13.Profile{Type: "ATS_PROFILE", Name: "", Description: "description", CDNID: 1},
-		v13.Profile{Type: "", Name: "badprofile", Description: "description", CDNID: 1},
+	prs := []tc.Profile{
+		tc.Profile{Type: "", Name: "", Description: "", CDNID: 0},
+		tc.Profile{Type: "ATS_PROFILE", Name: "badprofile", Description: "description", CDNID: 0},
+		tc.Profile{Type: "ATS_PROFILE", Name: "badprofile", Description: "", CDNID: 1},
+		tc.Profile{Type: "ATS_PROFILE", Name: "", Description: "description", CDNID: 1},
+		tc.Profile{Type: "", Name: "badprofile", Description: "description", CDNID: 1},
 	}
 
 	for _, pr := range prs {
diff --git a/traffic_ops/testing/api/v13/servers_test.go b/traffic_ops/testing/api/v13/servers_test.go
index a81b662be..d3399aede 100644
--- a/traffic_ops/testing/api/v13/servers_test.go
+++ b/traffic_ops/testing/api/v13/servers_test.go
@@ -80,7 +80,7 @@ func CreateTestServers(t *testing.T) {
 	// loop through servers, assign FKs and create
 	for _, server := range testData.Servers {
 		// GET EDGE type
-		respTypes, _, err := TOSession.GetTypeByName(server.TypeName)
+		respTypes, _, err := TOSession.GetTypeByName(server.Type)
 		if err != nil {
 			t.Errorf("cannot GET Division by name: EDGE - %v\n", err)
 		}
diff --git a/traffic_ops/testing/api/v13/session.go b/traffic_ops/testing/api/v13/session.go
index 09fe9d085..423d97fc9 100644
--- a/traffic_ops/testing/api/v13/session.go
+++ b/traffic_ops/testing/api/v13/session.go
@@ -18,28 +18,28 @@ package v13
 import (
 	"time"
 
-	"github.com/apache/trafficcontrol/traffic_ops/client/v13"
+	"github.com/apache/trafficcontrol/traffic_ops/client"
 	_ "github.com/lib/pq"
 )
 
 var (
-	TOSession       *v13.Session
-	NoAuthTOSession *v13.Session
+	TOSession       *client.Session
+	NoAuthTOSession *client.Session
 )
 
 func SetupSession(toReqTimeout time.Duration, toURL string, toUser string, toPass string) error {
 	var err error
 
 	toReqTimeout = time.Second * time.Duration(Config.Default.Session.TimeoutInSecs)
-	NoAuthTOSession = v13.NewNoAuthSession(toURL, true, "to-api-v13-client-tests", true, toReqTimeout)
-	TOSession, _, err = v13.LoginWithAgent(toURL, toUser, toPass, true, "to-api-v13-client-tests", true, toReqTimeout)
+	NoAuthTOSession = client.NewNoAuthSession(toURL, true, "to-api-v13-client-tests", true, toReqTimeout)
+	TOSession, _, err = client.LoginWithAgent(toURL, toUser, toPass, true, "to-api-v13-client-tests", true, toReqTimeout)
 	return err
 }
 
 func TeardownSession(toReqTimeout time.Duration, toURL string, toUser string, toPass string) error {
 	var err error
 	toReqTimeout = time.Second * time.Duration(Config.Default.Session.TimeoutInSecs)
-	TOSession, _, err = v13.LogoutWithAgent(toURL, toUser, toPass, true, "to-api-v13-client-tests", true, toReqTimeout)
+	TOSession, _, err = client.LogoutWithAgent(toURL, toUser, toPass, true, "to-api-v13-client-tests", true, toReqTimeout)
 
 	return err
 }
diff --git a/traffic_ops/testing/api/v13/tc-fixtures.json b/traffic_ops/testing/api/v13/tc-fixtures.json
index 870021a08..764ddfd85 100644
--- a/traffic_ops/testing/api/v13/tc-fixtures.json
+++ b/traffic_ops/testing/api/v13/tc-fixtures.json
@@ -683,7 +683,7 @@
             "routerHostName": "",
             "routerPortName": "",
             "tcpPort": 80,
-            "typeName": "EDGE",
+            "type": "EDGE",
             "updPending": true,
             "xmppId": "atlanta-edge-01\\\\@ocdn.kabletown.net",
             "xmppPasswd": "X"
@@ -715,7 +715,7 @@
             "routerHostName": "",
             "routerPortName": "",
             "tcpPort": 8086,
-            "typeName": "EDGE",
+            "type": "EDGE",
             "updPending": true,
             "xmppId": "",
             "xmppPasswd": ""
@@ -747,7 +747,7 @@
             "routerHostName": "",
             "routerPortName": "",
             "tcpPort": 80,
-            "typeName": "EDGE",
+            "type": "EDGE",
             "updPending": true,
             "xmppId": "atlanta-router-01\\\\@ocdn.kabletown.net",
             "xmppPasswd": "X"
@@ -779,7 +779,7 @@
             "routerHostName": "",
             "routerPortName": "",
             "tcpPort": 80,
-            "typeName": "EDGE",
+            "type": "EDGE",
             "updPending": true,
             "xmppId": "atlanta-edge-03\\\\@ocdn.kabletown.net",
             "xmppPasswd": "X"
@@ -811,7 +811,7 @@
             "routerHostName": "",
             "routerPortName": "",
             "tcpPort": 80,
-            "typeName": "EDGE",
+            "type": "EDGE",
             "updPending": true,
             "xmppId": "atlanta-edge-14\\\\@ocdn.kabletown.net",
             "xmppPasswd": "X"
@@ -843,7 +843,7 @@
             "routerHostName": "",
             "routerPortName": "",
             "tcpPort": 80,
-            "typeName": "EDGE",
+            "type": "EDGE",
             "updPending": true,
             "xmppId": "atlanta-edge-15\\\\@ocdn.kabletown.net",
             "xmppPasswd": "X"
@@ -875,7 +875,7 @@
             "routerHostName": "",
             "routerPortName": "",
             "tcpPort": 80,
-            "typeName": "MID",
+            "type": "MID",
             "updPending": true,
             "xmppId": "atlanta-mid-16\\\\@ocdn.kabletown.net",
             "xmppPasswd": "X"
@@ -907,7 +907,7 @@
             "routerHostName": "",
             "routerPortName": "",
             "tcpPort": 80,
-            "typeName": "EDGE",
+            "type": "EDGE",
             "updPending": true,
             "xmppId": "atlanta-org-1\\\\@ocdn.kabletown.net",
             "xmppPasswd": "X"
@@ -939,7 +939,7 @@
             "routerHostName": "",
             "routerPortName": "",
             "tcpPort": 80,
-            "typeName": "EDGE",
+            "type": "EDGE",
             "updPending": true,
             "xmppId": "atlanta-org-1\\\\@ocdn.kabletown.net",
             "xmppPasswd": "X"
@@ -971,7 +971,7 @@
             "routerHostName": "",
             "routerPortName": "",
             "tcpPort": 80,
-            "typeName": "MID",
+            "type": "MID",
             "updPending": true,
             "xmppId": "atlanta-mid-01\\\\@ocdn.kabletown.net",
             "xmppPasswd": "X"
@@ -1003,7 +1003,7 @@
             "routerHostName": "",
             "routerPortName": "",
             "tcpPort": 81,
-            "typeName": "TRAFFIC_MONITOR",
+            "type": "TRAFFIC_MONITOR",
             "updPending": true,
             "xmppId": "",
             "xmppPasswd": "X"
@@ -1035,7 +1035,7 @@
             "routerHostName": "",
             "routerPortName": "",
             "tcpPort": 8088,
-            "typeName": "RIAK",
+            "type": "RIAK",
             "updPending": true,
             "xmppId": "",
             "xmppPasswd": ""
diff --git a/traffic_ops/testing/api/v13/traffic_control.go b/traffic_ops/testing/api/v13/traffic_control.go
index 60dbcdd83..ba96dcb07 100644
--- a/traffic_ops/testing/api/v13/traffic_control.go
+++ b/traffic_ops/testing/api/v13/traffic_control.go
@@ -16,31 +16,30 @@
 package v13
 
 import (
-	v12 "github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 )
 
 // TrafficControl - maps to the tc-fixtures.json file
 type TrafficControl struct {
-	ASNs                           []v12.ASN                           `json:"asns"`
-	CDNs                           []v13.CDN                           `json:"cdns"`
-	CacheGroups                    []v13.CacheGroupNullable            `json:"cachegroups"`
-	DeliveryServiceRequests        []v12.DeliveryServiceRequest        `json:"deliveryServiceRequests"`
-	DeliveryServiceRequestComments []v12.DeliveryServiceRequestComment `json:"deliveryServiceRequestComments"`
-	DeliveryServices               []v12.DeliveryServiceV13            `json:"deliveryservices"`
-	Divisions                      []v12.Division                      `json:"divisions"`
-	Federations                    []v13.CDNFederation                 `json:"federations"`
-	Coordinates                    []v13.Coordinate                    `json:"coordinates"`
-	Origins                        []v13.Origin                        `json:"origins"`
-	Profiles                       []v13.Profile                       `json:"profiles"`
-	Parameters                     []v12.Parameter                     `json:"parameters"`
-	ProfileParameters              []v13.ProfileParameter              `json:"profileParameters"`
-	PhysLocations                  []v12.PhysLocation                  `json:"physLocations"`
-	Regions                        []v12.Region                        `json:"regions"`
-	Roles                          []v13.Role                          `json:"roles"`
-	Servers                        []v13.Server                        `json:"servers"`
-	Statuses                       []v12.Status                        `json:"statuses"`
-	StaticDNSEntries               []v13.StaticDNSEntry                `json:"staticdnsentries"`
-	Tenants                        []v12.Tenant                        `json:"tenants"`
-	Types                          []v12.Type                          `json:"types"`
+	ASNs                           []tc.ASN                           `json:"asns"`
+	CDNs                           []tc.CDN                           `json:"cdns"`
+	CacheGroups                    []tc.CacheGroupNullable            `json:"cachegroups"`
+	DeliveryServiceRequests        []tc.DeliveryServiceRequest        `json:"deliveryServiceRequests"`
+	DeliveryServiceRequestComments []tc.DeliveryServiceRequestComment `json:"deliveryServiceRequestComments"`
+	DeliveryServices               []tc.DeliveryService               `json:"deliveryservices"`
+	Divisions                      []tc.Division                      `json:"divisions"`
+	Federations                    []tc.CDNFederation                 `json:"federations"`
+	Coordinates                    []tc.Coordinate                    `json:"coordinates"`
+	Origins                        []tc.Origin                        `json:"origins"`
+	Profiles                       []tc.Profile                       `json:"profiles"`
+	Parameters                     []tc.Parameter                     `json:"parameters"`
+	ProfileParameters              []tc.ProfileParameter              `json:"profileParameters"`
+	PhysLocations                  []tc.PhysLocation                  `json:"physLocations"`
+	Regions                        []tc.Region                        `json:"regions"`
+	Roles                          []tc.Role                          `json:"roles"`
+	Servers                        []tc.Server                        `json:"servers"`
+	Statuses                       []tc.Status                        `json:"statuses"`
+	StaticDNSEntries               []tc.StaticDNSEntry                `json:"staticdnsentries"`
+	Tenants                        []tc.Tenant                        `json:"tenants"`
+	Types                          []tc.Type                          `json:"types"`
 }
diff --git a/traffic_ops/traffic_ops_golang/asn/asns_test.go b/traffic_ops/traffic_ops_golang/asn/asns_test.go
index f08697fd3..0e4911191 100644
--- a/traffic_ops/traffic_ops_golang/asn/asns_test.go
+++ b/traffic_ops/traffic_ops_golang/asn/asns_test.go
@@ -71,6 +71,7 @@ func TestGetASNs(t *testing.T) {
 	for _, ts := range testCase {
 		rows = rows.AddRow(
 			*ts.ASN,
+			*ts.Cachegroup,
 			*ts.CachegroupID,
 			*ts.ID,
 			*ts.LastUpdated,
diff --git a/traffic_ops/traffic_ops_golang/cachegroup/cachegroups.go b/traffic_ops/traffic_ops_golang/cachegroup/cachegroups.go
index d9e7ab4e6..08825168e 100644
--- a/traffic_ops/traffic_ops_golang/cachegroup/cachegroups.go
+++ b/traffic_ops/traffic_ops_golang/cachegroup/cachegroups.go
@@ -29,7 +29,6 @@ import (
 	"github.com/apache/trafficcontrol/lib/go-log"
 	"github.com/apache/trafficcontrol/lib/go-tc"
 	"github.com/apache/trafficcontrol/lib/go-tc/tovalidate"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/lib/go-util"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/dbhelpers"
@@ -41,12 +40,12 @@ import (
 
 type TOCacheGroup struct {
 	ReqInfo *api.APIInfo `json:"-"`
-	v13.CacheGroupNullable
+	tc.CacheGroupNullable
 }
 
 func GetTypeSingleton() api.CRUDFactory {
 	return func(reqInfo *api.APIInfo) api.CRUDer {
-		toReturn := TOCacheGroup{reqInfo, v13.CacheGroupNullable{}}
+		toReturn := TOCacheGroup{reqInfo, tc.CacheGroupNullable{}}
 		return &toReturn
 	}
 }
@@ -541,7 +540,7 @@ func selectQuery() string {
 	// the 'type_name' and 'type_id' aliases on the 'type.name'
 	// and cachegroup.type' fields are needed
 	// to disambiguate the struct scan, see also the
-	// v13.CacheGroupNullable struct 'db' metadata
+	// tc.CacheGroupNullable struct 'db' metadata
 	query := `SELECT
 cachegroup.id,
 cachegroup.name,
@@ -568,7 +567,7 @@ LEFT JOIN cachegroup AS cgs ON cachegroup.secondary_parent_cachegroup_id = cgs.i
 func updateQuery() string {
 	// to disambiguate struct scans, the named
 	// parameter 'type_id' is an alias to cachegroup.type
-	//see also the v13.CacheGroupNullable struct 'db' metadata
+	//see also the tc.CacheGroupNullable struct 'db' metadata
 	query := `UPDATE
 cachegroup SET
 name=$1,
diff --git a/traffic_ops/traffic_ops_golang/cachegroup/cachegroups_test.go b/traffic_ops/traffic_ops_golang/cachegroup/cachegroups_test.go
index 2335f705e..18ab817aa 100644
--- a/traffic_ops/traffic_ops_golang/cachegroup/cachegroups_test.go
+++ b/traffic_ops/traffic_ops_golang/cachegroup/cachegroups_test.go
@@ -27,7 +27,6 @@ import (
 	"time"
 
 	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/lib/go-util"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/test"
@@ -36,9 +35,9 @@ import (
 	sqlmock "gopkg.in/DATA-DOG/go-sqlmock.v1"
 )
 
-func getTestCacheGroups() []v13.CacheGroup {
-	cgs := []v13.CacheGroup{}
-	testCG1 := v13.CacheGroup{
+func getTestCacheGroups() []tc.CacheGroup {
+	cgs := []tc.CacheGroup{}
+	testCG1 := tc.CacheGroup{
 		ID:                          1,
 		Name:                        "cachegroup1",
 		ShortName:                   "cg1",
@@ -57,7 +56,7 @@ func getTestCacheGroups() []v13.CacheGroup {
 	}
 	cgs = append(cgs, testCG1)
 
-	testCG2 := v13.CacheGroup{
+	testCG2 := tc.CacheGroup{
 		ID:                          1,
 		Name:                        "parentCacheGroup",
 		ShortName:                   "pg1",
@@ -204,7 +203,7 @@ func TestValidate(t *testing.T) {
 	ty := "EDGE_LOC"
 	ti := 6
 	lu := tc.TimeNoMod{Time: time.Now()}
-	c := TOCacheGroup{ReqInfo: &reqInfo, CacheGroupNullable: v13.CacheGroupNullable{
+	c := TOCacheGroup{ReqInfo: &reqInfo, CacheGroupNullable: tc.CacheGroupNullable{
 		ID:                  &id,
 		Name:                &nm,
 		ShortName:           &sn,
@@ -238,7 +237,7 @@ func TestValidate(t *testing.T) {
 	la = 90.0
 	lo = 90.0
 	lm = []tc.LocalizationMethod{tc.LocalizationMethodGeo, tc.LocalizationMethodCZ, tc.LocalizationMethodDeepCZ}
-	c = TOCacheGroup{ReqInfo: &reqInfo, CacheGroupNullable: v13.CacheGroupNullable{
+	c = TOCacheGroup{ReqInfo: &reqInfo, CacheGroupNullable: tc.CacheGroupNullable{
 		ID:                  &id,
 		Name:                &nm,
 		ShortName:           &sn,
diff --git a/traffic_ops/traffic_ops_golang/cachegroup/queueupdate.go b/traffic_ops/traffic_ops_golang/cachegroup/queueupdate.go
index edfab85eb..a430bab2d 100644
--- a/traffic_ops/traffic_ops_golang/cachegroup/queueupdate.go
+++ b/traffic_ops/traffic_ops_golang/cachegroup/queueupdate.go
@@ -27,7 +27,6 @@ import (
 	"strconv"
 
 	"github.com/apache/trafficcontrol/lib/go-tc"
-	tcv13 "github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 )
 
@@ -39,7 +38,7 @@ func QueueUpdates(w http.ResponseWriter, r *http.Request) {
 	}
 	defer inf.Close()
 
-	reqObj := tcv13.CachegroupQueueUpdatesRequest{}
+	reqObj := tc.CachegroupQueueUpdatesRequest{}
 	if err := json.NewDecoder(r.Body).Decode(&reqObj); err != nil {
 		api.HandleErr(w, r, http.StatusBadRequest, errors.New("malformed JSON: "+err.Error()), nil)
 		return
diff --git a/traffic_ops/traffic_ops_golang/cachegroup/trimmed.go b/traffic_ops/traffic_ops_golang/cachegroup/trimmed.go
index c01ab2c1f..6150f5c29 100644
--- a/traffic_ops/traffic_ops_golang/cachegroup/trimmed.go
+++ b/traffic_ops/traffic_ops_golang/cachegroup/trimmed.go
@@ -24,7 +24,7 @@ import (
 	"errors"
 	"net/http"
 
-	tc "github.com/apache/trafficcontrol/lib/go-tc/v13"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 )
 
diff --git a/traffic_ops/traffic_ops_golang/cdn/cdns.go b/traffic_ops/traffic_ops_golang/cdn/cdns.go
index ce67cefce..48a2324b2 100644
--- a/traffic_ops/traffic_ops_golang/cdn/cdns.go
+++ b/traffic_ops/traffic_ops_golang/cdn/cdns.go
@@ -28,7 +28,6 @@ import (
 	"github.com/apache/trafficcontrol/lib/go-log"
 	"github.com/apache/trafficcontrol/lib/go-tc"
 	"github.com/apache/trafficcontrol/lib/go-tc/tovalidate"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/lib/go-util"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/dbhelpers"
@@ -41,12 +40,12 @@ import (
 //we need a type alias to define functions on
 type TOCDN struct {
 	ReqInfo *api.APIInfo `json:"-"`
-	v13.CDNNullable
+	tc.CDNNullable
 }
 
 func GetTypeSingleton() api.CRUDFactory {
 	return func(reqInfo *api.APIInfo) api.CRUDer {
-		toReturn := TOCDN{reqInfo, v13.CDNNullable{}}
+		toReturn := TOCDN{reqInfo, tc.CDNNullable{}}
 		return &toReturn
 	}
 }
@@ -190,7 +189,7 @@ func (cdn *TOCDN) Read(parameters map[string]string) ([]interface{}, []error, tc
 
 	CDNs := []interface{}{}
 	for rows.Next() {
-		var cdn v13.CDNNullable
+		var cdn tc.CDNNullable
 		if err = rows.StructScan(&cdn); err != nil {
 			log.Errorf("error parsing CDN rows: %v", err)
 			return nil, []error{tc.DBError}, tc.SystemError
diff --git a/traffic_ops/traffic_ops_golang/cdn/cdns_test.go b/traffic_ops/traffic_ops_golang/cdn/cdns_test.go
index d7dd8f340..e0103e299 100644
--- a/traffic_ops/traffic_ops_golang/cdn/cdns_test.go
+++ b/traffic_ops/traffic_ops_golang/cdn/cdns_test.go
@@ -27,7 +27,6 @@ import (
 	"time"
 
 	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/lib/go-util"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/test"
@@ -36,9 +35,9 @@ import (
 	sqlmock "gopkg.in/DATA-DOG/go-sqlmock.v1"
 )
 
-func getTestCDNs() []v13.CDN {
-	cdns := []v13.CDN{}
-	testCDN := v13.CDN{
+func getTestCDNs() []tc.CDN {
+	cdns := []tc.CDN{}
+	testCDN := tc.CDN{
 		DNSSECEnabled: false,
 		DomainName:    "domainName",
 		ID:            1,
@@ -66,7 +65,7 @@ func TestReadCDNs(t *testing.T) {
 	defer db.Close()
 
 	testCDNs := getTestCDNs()
-	cols := test.ColsFromStructByTag("db", v13.CDN{})
+	cols := test.ColsFromStructByTag("db", tc.CDN{})
 	rows := sqlmock.NewRows(cols)
 
 	for _, ts := range testCDNs {
@@ -133,7 +132,7 @@ func TestInterfaces(t *testing.T) {
 func TestValidate(t *testing.T) {
 	// invalid name, empty domainname
 	n := "not_a_valid_cdn"
-	c := TOCDN{CDNNullable: v13.CDNNullable{Name: &n}}
+	c := TOCDN{CDNNullable: tc.CDNNullable{Name: &n}}
 	errs := util.JoinErrsStr(test.SortErrors(test.SplitErrors(c.Validate())))
 
 	expectedErrs := util.JoinErrsStr([]error{
@@ -148,7 +147,7 @@ func TestValidate(t *testing.T) {
 	//  name,  domainname both valid
 	n = "This.is.2.a-Valid---CDNNAME."
 	d := `awesome-cdn.example.net`
-	c = TOCDN{CDNNullable: v13.CDNNullable{Name: &n, DomainName: &d}}
+	c = TOCDN{CDNNullable: tc.CDNNullable{Name: &n, DomainName: &d}}
 	err := c.Validate()
 	if err != nil {
 		t.Errorf("expected nil, got %s", err)
diff --git a/traffic_ops/traffic_ops_golang/cdn/configs.go b/traffic_ops/traffic_ops_golang/cdn/configs.go
index c55fc5b56..287f8a07e 100644
--- a/traffic_ops/traffic_ops_golang/cdn/configs.go
+++ b/traffic_ops/traffic_ops_golang/cdn/configs.go
@@ -24,7 +24,7 @@ import (
 	"errors"
 	"net/http"
 
-	tc "github.com/apache/trafficcontrol/lib/go-tc/v13"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 )
 
diff --git a/traffic_ops/traffic_ops_golang/cdn/domains.go b/traffic_ops/traffic_ops_golang/cdn/domains.go
index db87a094b..4e8df5e9c 100644
--- a/traffic_ops/traffic_ops_golang/cdn/domains.go
+++ b/traffic_ops/traffic_ops_golang/cdn/domains.go
@@ -23,7 +23,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 
 	"github.com/jmoiron/sqlx"
@@ -31,9 +31,9 @@ import (
 
 const RouterProfilePrefix = "CCR"
 
-func getDomainsList(tx *sqlx.Tx) ([]v13.Domain, error) {
+func getDomainsList(tx *sqlx.Tx) ([]tc.Domain, error) {
 
-	domains := []v13.Domain{}
+	domains := []tc.Domain{}
 
 	q := `SELECT p.id, p.name, p.description, domain_name FROM profile AS p
 	JOIN cdn ON p.cdn = cdn.id WHERE p.name LIKE '` + RouterProfilePrefix + `%'`
@@ -46,7 +46,7 @@ func getDomainsList(tx *sqlx.Tx) ([]v13.Domain, error) {
 
 	for rows.Next() {
 
-		d := v13.Domain{ParameterID: -1}
+		d := tc.Domain{ParameterID: -1}
 		err := rows.Scan(&d.ProfileID, &d.ProfileName, &d.ProfileDescription, &d.DomainName)
 		if err != nil {
 			return nil, fmt.Errorf("getting profile: %s", err)
diff --git a/traffic_ops/traffic_ops_golang/cdnfederation/cdnfederations.go b/traffic_ops/traffic_ops_golang/cdnfederation/cdnfederations.go
index 455b694c8..969b64875 100644
--- a/traffic_ops/traffic_ops_golang/cdnfederation/cdnfederations.go
+++ b/traffic_ops/traffic_ops_golang/cdnfederation/cdnfederations.go
@@ -29,7 +29,6 @@ import (
 	"github.com/apache/trafficcontrol/lib/go-log"
 	"github.com/apache/trafficcontrol/lib/go-tc"
 	"github.com/apache/trafficcontrol/lib/go-tc/tovalidate"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/lib/go-util"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/dbhelpers"
@@ -42,13 +41,13 @@ import (
 // we need a type alias to define functions on
 type TOCDNFederation struct {
 	ReqInfo *api.APIInfo `json:"-"`
-	v13.CDNFederation
+	tc.CDNFederation
 }
 
 // Used for all CRUD routes
 func GetTypeSingleton() api.CRUDFactory {
 	return func(reqInfo *api.APIInfo) api.CRUDer {
-		toReturn := TOCDNFederation{reqInfo, v13.CDNFederation{}}
+		toReturn := TOCDNFederation{reqInfo, tc.CDNFederation{}}
 		return &toReturn
 	}
 }
@@ -228,7 +227,7 @@ func (fed *TOCDNFederation) Read(parameters map[string]string) ([]interface{}, [
 	for rows.Next() {
 
 		var tenantID *int
-		fed.DeliveryServiceIDs = &v13.DeliveryServiceIDs{}
+		fed.DeliveryServiceIDs = &tc.DeliveryServiceIDs{}
 		if err = rows.Scan(&tenantID, &fed.ID, &fed.CName, &fed.TTL, &fed.Description, &fed.LastUpdated, &fed.DsId, &fed.XmlId); err != nil {
 			log.Errorf("parsing federation rows: %v", err)
 			return nil, []error{tc.DBError}, tc.SystemError
diff --git a/traffic_ops/traffic_ops_golang/coordinate/coordinates.go b/traffic_ops/traffic_ops_golang/coordinate/coordinates.go
index e21dea4b4..253312414 100644
--- a/traffic_ops/traffic_ops_golang/coordinate/coordinates.go
+++ b/traffic_ops/traffic_ops_golang/coordinate/coordinates.go
@@ -28,7 +28,6 @@ import (
 	"github.com/apache/trafficcontrol/lib/go-log"
 	"github.com/apache/trafficcontrol/lib/go-tc"
 	"github.com/apache/trafficcontrol/lib/go-tc/tovalidate"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/lib/go-util"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/dbhelpers"
@@ -41,12 +40,12 @@ import (
 //we need a type alias to define functions on
 type TOCoordinate struct {
 	ReqInfo *api.APIInfo `json:"-"`
-	v13.CoordinateNullable
+	tc.CoordinateNullable
 }
 
 func GetTypeSingleton() api.CRUDFactory {
 	return func(reqInfo *api.APIInfo) api.CRUDer {
-		toReturn := TOCoordinate{reqInfo, v13.CoordinateNullable{}}
+		toReturn := TOCoordinate{reqInfo, tc.CoordinateNullable{}}
 		return &toReturn
 	}
 }
diff --git a/traffic_ops/traffic_ops_golang/coordinate/coordinates_test.go b/traffic_ops/traffic_ops_golang/coordinate/coordinates_test.go
index 10c15d5ff..0522c8ed1 100644
--- a/traffic_ops/traffic_ops_golang/coordinate/coordinates_test.go
+++ b/traffic_ops/traffic_ops_golang/coordinate/coordinates_test.go
@@ -27,7 +27,6 @@ import (
 	"time"
 
 	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/lib/go-util"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/test"
@@ -36,9 +35,9 @@ import (
 	sqlmock "gopkg.in/DATA-DOG/go-sqlmock.v1"
 )
 
-func getTestCoordinates() []v13.Coordinate {
-	coords := []v13.Coordinate{}
-	testCoord1 := v13.Coordinate{
+func getTestCoordinates() []tc.Coordinate {
+	coords := []tc.Coordinate{}
+	testCoord1 := tc.Coordinate{
 		ID:          1,
 		Name:        "coordinate1",
 		Latitude:    38.7,
@@ -47,7 +46,7 @@ func getTestCoordinates() []v13.Coordinate {
 	}
 	coords = append(coords, testCoord1)
 
-	testCoord2 := v13.Coordinate{
+	testCoord2 := tc.Coordinate{
 		ID:          2,
 		Name:        "coordinate2",
 		Latitude:    38.7,
@@ -70,7 +69,7 @@ func TestReadCoordinates(t *testing.T) {
 	defer db.Close()
 
 	testCoords := getTestCoordinates()
-	cols := test.ColsFromStructByTag("db", v13.Coordinate{})
+	cols := test.ColsFromStructByTag("db", tc.Coordinate{})
 	rows := sqlmock.NewRows(cols)
 
 	for _, ts := range testCoords {
@@ -141,7 +140,7 @@ func TestValidate(t *testing.T) {
 	la := -190.0
 	lo := -190.0
 	lu := tc.TimeNoMod{Time: time.Now()}
-	c := TOCoordinate{CoordinateNullable: v13.CoordinateNullable{ID: &id,
+	c := TOCoordinate{CoordinateNullable: tc.CoordinateNullable{ID: &id,
 		Name:        &nm,
 		Latitude:    &la,
 		Longitude:   &lo,
@@ -163,7 +162,7 @@ func TestValidate(t *testing.T) {
 	nm = "This.is.2.a-Valid---Coordinate."
 	la = 90.0
 	lo = 90.0
-	c = TOCoordinate{CoordinateNullable: v13.CoordinateNullable{ID: &id,
+	c = TOCoordinate{CoordinateNullable: tc.CoordinateNullable{ID: &id,
 		Name:        &nm,
 		Latitude:    &la,
 		Longitude:   &lo,
diff --git a/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservicesv12.go b/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservicesv12.go
index b6bc3b0d2..f8b15a688 100644
--- a/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservicesv12.go
+++ b/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservicesv12.go
@@ -218,7 +218,7 @@ func CreateV12() http.HandlerFunc {
 			api.HandleErr(w, r, http.StatusBadRequest, errors.New("decoding: "+err.Error()), nil)
 			return
 		}
-		dsv13 := tc.NewDeliveryServiceNullableV13FromV12(ds)
+		dsv13 := tc.NewDeliveryServiceNullableFromV12(ds)
 		if authorized, err := isTenantAuthorized(inf.User, inf.Tx, &ds); err != nil {
 			api.HandleErr(w, r, http.StatusInternalServerError, nil, errors.New("checking tenant: "+err.Error()))
 			return
@@ -337,7 +337,7 @@ func UpdateV12() http.HandlerFunc {
 			api.HandleErr(w, r, http.StatusBadRequest, errors.New("decoding: "+err.Error()), nil)
 			return
 		}
-		dsv13 := tc.NewDeliveryServiceNullableV13FromV12(ds)
+		dsv13 := tc.NewDeliveryServiceNullableFromV12(ds)
 		if authorized, err := isTenantAuthorized(inf.User, inf.Tx, &ds); err != nil {
 			api.HandleErr(w, r, http.StatusInternalServerError, nil, errors.New("checking tenant: "+err.Error()))
 			return
diff --git a/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservicesv13.go b/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservicesv13.go
index 6ed7ffece..abd56df1d 100644
--- a/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservicesv13.go
+++ b/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservicesv13.go
@@ -46,7 +46,7 @@ import (
 
 type TODeliveryServiceV13 struct {
 	ReqInfo *api.APIInfo
-	tc.DeliveryServiceNullableV13
+	tc.DeliveryServiceNullable
 }
 
 func (ds *TODeliveryServiceV13) V12() *TODeliveryServiceV12 {
@@ -54,15 +54,15 @@ func (ds *TODeliveryServiceV13) V12() *TODeliveryServiceV12 {
 }
 
 func (ds TODeliveryServiceV13) MarshalJSON() ([]byte, error) {
-	return json.Marshal(ds.DeliveryServiceNullableV13)
+	return json.Marshal(ds.DeliveryServiceNullable)
 }
 func (ds *TODeliveryServiceV13) UnmarshalJSON(data []byte) error {
-	return json.Unmarshal(data, ds.DeliveryServiceNullableV13)
+	return json.Unmarshal(data, ds.DeliveryServiceNullable)
 }
 
 func GetTypeV13Factory() api.CRUDFactory {
 	return func(reqInfo *api.APIInfo) api.CRUDer {
-		toReturn := TODeliveryServiceV13{reqInfo, tc.DeliveryServiceNullableV13{}}
+		toReturn := TODeliveryServiceV13{reqInfo, tc.DeliveryServiceNullable{}}
 		return &toReturn
 	}
 }
@@ -90,7 +90,7 @@ func (ds *TODeliveryServiceV13) GetType() string {
 }
 
 func (ds *TODeliveryServiceV13) Validate() error {
-	return ds.DeliveryServiceNullableV13.Validate(ds.ReqInfo.Tx.Tx)
+	return ds.DeliveryServiceNullable.Validate(ds.ReqInfo.Tx.Tx)
 }
 
 // Create is unimplemented, needed to satisfy CRUDer, since the framework doesn't allow a create to return an array of one
@@ -109,7 +109,7 @@ func CreateV13() http.HandlerFunc {
 		}
 		defer inf.Close()
 
-		ds := tc.DeliveryServiceNullableV13{}
+		ds := tc.DeliveryServiceNullable{}
 		if err := api.Parse(r.Body, inf.Tx.Tx, &ds); err != nil {
 			api.HandleErr(w, r, http.StatusBadRequest, errors.New("decoding: "+err.Error()), nil)
 			return
@@ -135,12 +135,12 @@ func CreateV13() http.HandlerFunc {
 			return
 		}
 		*inf.CommitTx = true
-		api.WriteRespAlertObj(w, r, tc.SuccessLevel, "Deliveryservice creation was successful.", []tc.DeliveryServiceNullableV13{ds})
+		api.WriteRespAlertObj(w, r, tc.SuccessLevel, "Deliveryservice creation was successful.", []tc.DeliveryServiceNullable{ds})
 	}
 }
 
 // create creates the given ds in the database, and returns the DS with its id and other fields created on insert set. On error, the HTTP status code, user error, and system error are returned. The status code SHOULD NOT be used, if both errors are nil.
-func create(tx *sql.Tx, cfg config.Config, user *auth.CurrentUser, ds tc.DeliveryServiceNullableV13) (tc.DeliveryServiceNullableV13, int, error, error) {
+func create(tx *sql.Tx, cfg config.Config, user *auth.CurrentUser, ds tc.DeliveryServiceNullable) (tc.DeliveryServiceNullable, int, error, error) {
 	// TODO change DeepCachingType to implement sql.Valuer and sql.Scanner, so sqlx struct scan can be used.
 	deepCachingType := tc.DeepCachingType("").String()
 	if ds.DeepCachingType != nil {
@@ -151,86 +151,86 @@ func create(tx *sql.Tx, cfg config.Config, user *auth.CurrentUser, ds tc.Deliver
 	if err != nil {
 		if pqerr, ok := err.(*pq.Error); ok {
 			err, _ := dbhelpers.ParsePQUniqueConstraintError(pqerr)
-			return tc.DeliveryServiceNullableV13{}, http.StatusBadRequest, errors.New("a delivery service with " + err.Error()), nil
+			return tc.DeliveryServiceNullable{}, http.StatusBadRequest, errors.New("a delivery service with " + err.Error()), nil
 		}
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("inserting ds: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("inserting ds: " + err.Error())
 	}
 	defer resultRows.Close()
 
 	id := 0
 	lastUpdated := tc.TimeNoMod{}
 	if !resultRows.Next() {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("no deliveryservice request inserted, no id was returned")
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("no deliveryservice request inserted, no id was returned")
 	}
 	if err := resultRows.Scan(&id, &lastUpdated); err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("could not scan id from insert: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("could not scan id from insert: " + err.Error())
 	}
 	if resultRows.Next() {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("too many ids returned from deliveryservice request insert")
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("too many ids returned from deliveryservice request insert")
 	}
 	ds.ID = &id
 
 	if ds.ID == nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("missing id after insert")
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("missing id after insert")
 	}
 	if ds.XMLID == nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("missing xml_id after insert")
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("missing xml_id after insert")
 	}
 	if ds.TypeID == nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("missing type after insert")
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("missing type after insert")
 	}
 	dsType, err := getTypeFromID(*ds.TypeID, tx)
 	if err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("getting delivery service type: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("getting delivery service type: " + err.Error())
 	}
 	ds.Type = &dsType
 
 	if err := createDefaultRegex(tx, *ds.ID, *ds.XMLID); err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("creating default regex: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("creating default regex: " + err.Error())
 	}
 
 	matchlists, err := GetDeliveryServicesMatchLists([]string{*ds.XMLID}, tx)
 	if err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("creating DS: reading matchlists: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("creating DS: reading matchlists: " + err.Error())
 	}
 	if matchlist, ok := matchlists[*ds.XMLID]; !ok {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("creating DS: reading matchlists: not found")
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("creating DS: reading matchlists: not found")
 	} else {
 		ds.MatchList = &matchlist
 	}
 
 	cdnName, cdnDomain, dnssecEnabled, err := getCDNNameDomainDNSSecEnabled(*ds.ID, tx)
 	if err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("creating DS: getting CDN info: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("creating DS: getting CDN info: " + err.Error())
 	}
 
 	ds.ExampleURLs = MakeExampleURLs(ds.Protocol, *ds.Type, *ds.RoutingName, *ds.MatchList, cdnDomain)
 
 	if err := ensureHeaderRewriteParams(tx, *ds.ID, *ds.XMLID, ds.EdgeHeaderRewrite, edgeTier, *ds.Type); err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("creating edge header rewrite parameters: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("creating edge header rewrite parameters: " + err.Error())
 	}
 	if err := ensureHeaderRewriteParams(tx, *ds.ID, *ds.XMLID, ds.MidHeaderRewrite, midTier, *ds.Type); err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("creating mid header rewrite parameters: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("creating mid header rewrite parameters: " + err.Error())
 	}
 	if err := ensureRegexRemapParams(tx, *ds.ID, *ds.XMLID, ds.RegexRemap); err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("creating regex remap parameters: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("creating regex remap parameters: " + err.Error())
 	}
 	if err := ensureCacheURLParams(tx, *ds.ID, *ds.XMLID, ds.CacheURL); err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("creating cache url parameters: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("creating cache url parameters: " + err.Error())
 	}
 	if dnssecEnabled {
 		if err := PutDNSSecKeys(tx, &cfg, *ds.XMLID, cdnName, ds.ExampleURLs); err != nil {
-			return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("creating DNSSEC keys: " + err.Error())
+			return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("creating DNSSEC keys: " + err.Error())
 		}
 	}
 
 	if err := createPrimaryOrigin(tx, user, ds); err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("creating delivery service: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("creating delivery service: " + err.Error())
 	}
 
 	ds.LastUpdated = &lastUpdated
 	if err := api.CreateChangeLogRawErr(api.ApiChange, "Created ds: "+*ds.XMLID+" id: "+strconv.Itoa(*ds.ID), user, tx); err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("error writing to audit log: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("error writing to audit log: " + err.Error())
 	}
 	return ds, http.StatusOK, nil, nil
 }
@@ -265,7 +265,7 @@ func createDefaultRegex(tx *sql.Tx, dsID int, xmlID string) error {
 	return nil
 }
 
-func createPrimaryOrigin(tx *sql.Tx, user *auth.CurrentUser, ds tc.DeliveryServiceNullableV13) error {
+func createPrimaryOrigin(tx *sql.Tx, user *auth.CurrentUser, ds tc.DeliveryServiceNullable) error {
 	if ds.OrgServerFQDN == nil {
 		return nil
 	}
@@ -286,7 +286,7 @@ func createPrimaryOrigin(tx *sql.Tx, user *auth.CurrentUser, ds tc.DeliveryServi
 	return nil
 }
 
-func updatePrimaryOrigin(tx *sql.Tx, user *auth.CurrentUser, ds tc.DeliveryServiceNullableV13) error {
+func updatePrimaryOrigin(tx *sql.Tx, user *auth.CurrentUser, ds tc.DeliveryServiceNullable) error {
 	count := 0
 	q := `SELECT count(*) FROM origin WHERE deliveryservice = $1 AND is_primary`
 	if err := tx.QueryRow(q, *ds.ID).Scan(&count); err != nil {
@@ -387,7 +387,7 @@ func UpdateV13() http.HandlerFunc {
 
 		id := inf.IntParams["id"]
 
-		ds := tc.DeliveryServiceNullableV13{}
+		ds := tc.DeliveryServiceNullable{}
 		if err := json.NewDecoder(r.Body).Decode(&ds); err != nil {
 			api.HandleErr(w, r, http.StatusBadRequest, errors.New("malformed JSON: "+err.Error()), nil)
 			return
@@ -414,7 +414,7 @@ func UpdateV13() http.HandlerFunc {
 		}
 
 		*inf.CommitTx = true
-		api.WriteRespAlertObj(w, r, tc.SuccessLevel, "Deliveryservice update was successful.", []tc.DeliveryServiceNullableV13{ds})
+		api.WriteRespAlertObj(w, r, tc.SuccessLevel, "Deliveryservice update was successful.", []tc.DeliveryServiceNullable{ds})
 	}
 }
 
@@ -429,20 +429,20 @@ func getDSType(tx *sql.Tx, xmlid string) (tc.DSType, bool, error) {
 	return tc.DSTypeFromString(name), true, nil
 }
 
-func update(tx *sql.Tx, cfg config.Config, user *auth.CurrentUser, ds *tc.DeliveryServiceNullableV13) (tc.DeliveryServiceNullableV13, int, error, error) {
+func update(tx *sql.Tx, cfg config.Config, user *auth.CurrentUser, ds *tc.DeliveryServiceNullable) (tc.DeliveryServiceNullable, int, error, error) {
 	if ds.XMLID == nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusBadRequest, errors.New("missing xml_id"), nil
+		return tc.DeliveryServiceNullable{}, http.StatusBadRequest, errors.New("missing xml_id"), nil
 	}
 	if ds.ID == nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusBadRequest, errors.New("missing id"), nil
+		return tc.DeliveryServiceNullable{}, http.StatusBadRequest, errors.New("missing id"), nil
 	}
 
 	dsType, ok, err := getDSType(tx, *ds.XMLID)
 	if !ok {
-		return tc.DeliveryServiceNullableV13{}, http.StatusNotFound, errors.New("delivery service '" + *ds.XMLID + "' not found"), nil
+		return tc.DeliveryServiceNullable{}, http.StatusNotFound, errors.New("delivery service '" + *ds.XMLID + "' not found"), nil
 	}
 	if err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("getting delivery service type during update: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("getting delivery service type during update: " + err.Error())
 	}
 
 	// oldHostName will be used to determine if SSL Keys need updating - this will be empty if the DS doesn't have SSL keys, because DS types without SSL keys may not have regexes, and thus will fail to get a host name.
@@ -450,7 +450,7 @@ func update(tx *sql.Tx, cfg config.Config, user *auth.CurrentUser, ds *tc.Delive
 	if dsType.HasSSLKeys() {
 		oldHostName, err = getOldHostName(*ds.ID, tx)
 		if err != nil {
-			return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("getting existing delivery service hostname: " + err.Error())
+			return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("getting existing delivery service hostname: " + err.Error())
 		}
 	}
 
@@ -466,49 +466,49 @@ func update(tx *sql.Tx, cfg config.Config, user *auth.CurrentUser, ds *tc.Delive
 		if err, ok := err.(*pq.Error); ok {
 			err, eType := dbhelpers.ParsePQUniqueConstraintError(err)
 			if eType == tc.DataConflictError {
-				return tc.DeliveryServiceNullableV13{}, http.StatusBadRequest, errors.New("a delivery service with " + err.Error()), nil
+				return tc.DeliveryServiceNullable{}, http.StatusBadRequest, errors.New("a delivery service with " + err.Error()), nil
 			}
-			return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("query updating delivery service: pq: " + err.Error())
+			return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("query updating delivery service: pq: " + err.Error())
 		}
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("query updating delivery service: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("query updating delivery service: " + err.Error())
 	}
 	defer resultRows.Close()
 	if !resultRows.Next() {
-		return tc.DeliveryServiceNullableV13{}, http.StatusNotFound, errors.New("no delivery service found with this id"), nil
+		return tc.DeliveryServiceNullable{}, http.StatusNotFound, errors.New("no delivery service found with this id"), nil
 	}
 	lastUpdated := tc.TimeNoMod{}
 	if err := resultRows.Scan(&lastUpdated); err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("scan updating delivery service: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("scan updating delivery service: " + err.Error())
 	}
 	if resultRows.Next() {
 		xmlID := ""
 		if ds.XMLID != nil {
 			xmlID = *ds.XMLID
 		}
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("updating delivery service " + xmlID + ": " + "this update affected too many rows: > 1")
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("updating delivery service " + xmlID + ": " + "this update affected too many rows: > 1")
 	}
 
 	if ds.ID == nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("missing id after update")
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("missing id after update")
 	}
 	if ds.XMLID == nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("missing xml_id after update")
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("missing xml_id after update")
 	}
 	if ds.TypeID == nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("missing type after update")
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("missing type after update")
 	}
 	if ds.RoutingName == nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("missing routing name after update")
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("missing routing name after update")
 	}
 	newDSType, err := getTypeFromID(*ds.TypeID, tx)
 	if err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("getting delivery service type after update: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("getting delivery service type after update: " + err.Error())
 	}
 	ds.Type = &newDSType
 
 	cdnDomain, err := getCDNDomain(*ds.ID, tx) // need to get the domain again, in case it changed.
 	if err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("getting CDN domain after update: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("getting CDN domain after update: " + err.Error())
 	}
 
 	// newHostName will be used to determine if SSL Keys need updating - this will be empty if the DS doesn't have SSL keys, because DS types without SSL keys may not have regexes, and thus will fail to get a host name.
@@ -516,47 +516,47 @@ func update(tx *sql.Tx, cfg config.Config, user *auth.CurrentUser, ds *tc.Delive
 	if dsType.HasSSLKeys() {
 		newHostName, err = getHostName(ds.Protocol, *ds.Type, *ds.RoutingName, *ds.MatchList, cdnDomain)
 		if err != nil {
-			return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("getting hostname after update: " + err.Error())
+			return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("getting hostname after update: " + err.Error())
 		}
 	}
 
 	matchLists, err := GetDeliveryServicesMatchLists([]string{*ds.XMLID}, tx)
 	if err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("getting matchlists after update: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("getting matchlists after update: " + err.Error())
 	}
 	if ml, ok := matchLists[*ds.XMLID]; !ok {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("no matchlists after update")
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("no matchlists after update")
 	} else {
 		ds.MatchList = &ml
 	}
 
 	if newDSType.HasSSLKeys() && oldHostName != newHostName {
 		if err := updateSSLKeys(ds, newHostName, tx, cfg); err != nil {
-			return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("updating delivery service " + *ds.XMLID + ": updating SSL keys: " + err.Error())
+			return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("updating delivery service " + *ds.XMLID + ": updating SSL keys: " + err.Error())
 		}
 	}
 
 	if err := ensureHeaderRewriteParams(tx, *ds.ID, *ds.XMLID, ds.EdgeHeaderRewrite, edgeTier, *ds.Type); err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("creating edge header rewrite parameters: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("creating edge header rewrite parameters: " + err.Error())
 	}
 	if err := ensureHeaderRewriteParams(tx, *ds.ID, *ds.XMLID, ds.MidHeaderRewrite, midTier, *ds.Type); err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("creating mid header rewrite parameters: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("creating mid header rewrite parameters: " + err.Error())
 	}
 	if err := ensureRegexRemapParams(tx, *ds.ID, *ds.XMLID, ds.RegexRemap); err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("creating mid regex remap parameters: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("creating mid regex remap parameters: " + err.Error())
 	}
 	if err := ensureCacheURLParams(tx, *ds.ID, *ds.XMLID, ds.CacheURL); err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("creating mid cacheurl parameters: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("creating mid cacheurl parameters: " + err.Error())
 	}
 
 	if err := updatePrimaryOrigin(tx, user, *ds); err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("updating delivery service: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("updating delivery service: " + err.Error())
 	}
 
 	ds.LastUpdated = &lastUpdated
 
 	if err := api.CreateChangeLogRawErr(api.ApiChange, "Updated ds: "+*ds.XMLID+" id: "+strconv.Itoa(*ds.ID), user, tx); err != nil {
-		return tc.DeliveryServiceNullableV13{}, http.StatusInternalServerError, nil, errors.New("writing change log entry: " + err.Error())
+		return tc.DeliveryServiceNullable{}, http.StatusInternalServerError, nil, errors.New("writing change log entry: " + err.Error())
 	}
 	return *ds, http.StatusOK, nil, nil
 }
@@ -572,7 +572,7 @@ func (ds *TODeliveryServiceV13) IsTenantAuthorized(user *auth.CurrentUser) (bool
 	return ds.V12().IsTenantAuthorized(user)
 }
 
-func readGetDeliveryServices(params map[string]string, tx *sqlx.Tx, user *auth.CurrentUser) ([]tc.DeliveryServiceNullableV13, []error, tc.ApiErrorType) {
+func readGetDeliveryServices(params map[string]string, tx *sqlx.Tx, user *auth.CurrentUser) ([]tc.DeliveryServiceNullable, []error, tc.ApiErrorType) {
 	if strings.HasSuffix(params["id"], ".json") {
 		params["id"] = params["id"][:len(params["id"])-len(".json")]
 	}
@@ -625,10 +625,10 @@ func readGetDeliveryServices(params map[string]string, tx *sqlx.Tx, user *auth.C
 	}
 	defer rows.Close()
 
-	dses := []tc.DeliveryServiceNullableV13{}
+	dses := []tc.DeliveryServiceNullable{}
 	dsCDNDomains := map[string]string{}
 	for rows.Next() {
-		ds := tc.DeliveryServiceNullableV13{}
+		ds := tc.DeliveryServiceNullable{}
 		cdnDomain := ""
 		err := rows.Scan(&ds.Active, &ds.AnonymousBlockingEnabled, &ds.CacheURL, &ds.CCRDNSTTL, &ds.CDNID, &ds.CDNName, &ds.CheckPath, &ds.DeepCachingType, &ds.DisplayName, &ds.DNSBypassCNAME, &ds.DNSBypassIP, &ds.DNSBypassIP6, &ds.DNSBypassTTL, &ds.DSCP, &ds.EdgeHeaderRewrite, &ds.GeoLimitRedirectURL, &ds.GeoLimit, &ds.GeoLimitCountries, &ds.GeoProvider, &ds.GlobalMaxMBPS, &ds.GlobalMaxTPS, &ds.FQPacingRate, &ds.HTTPBypassFQDN, &ds.ID, &ds.InfoURL, &ds.InitialDispersion, &ds.IPV6RoutingEnabled, &ds.LastUpdated, &ds.LogsEnabled, &ds.LongDesc, &ds.LongDesc1, &ds.LongDesc2, &ds.MaxDNSAnswers, &ds.MidHeaderRewrite, &ds.MissLat, &ds.MissLong, &ds.MultiSiteOrigin, &ds.OrgServerFQDN, &ds.OriginShield, &ds.ProfileID, &ds.ProfileName, &ds.ProfileDesc, &ds.Protocol, &ds.QStringIgnore, &ds.RangeRequestHandling, &ds.RegexRemap, &ds.RegionalGeoBlocking, &ds.RemapText, &ds.RoutingName, &ds.SigningAlgorithm, &ds.SSLKeyVersion, &ds.TenantID, &ds.Tenant, &ds.TRRequestHeaders, &ds.TRResponseHeaders, &ds.Type, &ds.TypeID, &ds.XMLID, &cdnDomain)
 		if err != nil {
@@ -664,7 +664,7 @@ func readGetDeliveryServices(params map[string]string, tx *sqlx.Tx, user *auth.C
 	return dses, nil, tc.NoError
 }
 
-func updateSSLKeys(ds *tc.DeliveryServiceNullableV13, hostName string, tx *sql.Tx, cfg config.Config) error {
+func updateSSLKeys(ds *tc.DeliveryServiceNullable, hostName string, tx *sql.Tx, cfg config.Config) error {
 	if ds.XMLID == nil {
 		return errors.New("delivery services has no XMLID!")
 	}
diff --git a/traffic_ops/traffic_ops_golang/deliveryservice/request/requests_test.go b/traffic_ops/traffic_ops_golang/deliveryservice/request/requests_test.go
index d22033a00..2ddd489eb 100644
--- a/traffic_ops/traffic_ops_golang/deliveryservice/request/requests_test.go
+++ b/traffic_ops/traffic_ops_golang/deliveryservice/request/requests_test.go
@@ -61,9 +61,9 @@ func TestGetDeliveryServiceRequest(t *testing.T) {
 	r := &TODeliveryServiceRequest{DeliveryServiceRequestNullable: tc.DeliveryServiceRequestNullable{
 		ChangeType: &u,
 		Status:     &st,
-		DeliveryService: &tc.DeliveryServiceNullableV13{
+		DeliveryService: &tc.DeliveryServiceNullable{
 			DeliveryServiceNullableV12: tc.DeliveryServiceNullableV12{
-				DeliveryServiceNullable: tc.DeliveryServiceNullable{
+				DeliveryServiceNullableV11: tc.DeliveryServiceNullableV11{
 					XMLID:       &s,
 					CDNID:       &i,
 					LogsEnabled: &b,
@@ -77,14 +77,14 @@ func TestGetDeliveryServiceRequest(t *testing.T) {
 	}}
 
 	expectedErrors := []string{
-	/*
-		`'regionalGeoBlocking' is required`,
-		`'xmlId' cannot contain spaces`,
-		`'dscp' is required`,
-		`'displayName' cannot be blank`,
-		`'geoProvider' is required`,
-		`'typeId' is required`,
-	*/
+		/*
+			`'regionalGeoBlocking' is required`,
+			`'xmlId' cannot contain spaces`,
+			`'dscp' is required`,
+			`'displayName' cannot be blank`,
+			`'geoProvider' is required`,
+			`'typeId' is required`,
+		*/
 	}
 
 	r.SetKeys(map[string]interface{}{"id": 10})
diff --git a/traffic_ops/traffic_ops_golang/origin/origins.go b/traffic_ops/traffic_ops_golang/origin/origins.go
index 16b32e76e..b2b0ae36f 100644
--- a/traffic_ops/traffic_ops_golang/origin/origins.go
+++ b/traffic_ops/traffic_ops_golang/origin/origins.go
@@ -28,7 +28,6 @@ import (
 	"github.com/apache/trafficcontrol/lib/go-log"
 	"github.com/apache/trafficcontrol/lib/go-tc"
 	"github.com/apache/trafficcontrol/lib/go-tc/tovalidate"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/lib/go-util"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/auth"
@@ -44,12 +43,12 @@ import (
 //we need a type alias to define functions on
 type TOOrigin struct {
 	ReqInfo *api.APIInfo `json:"-"`
-	v13.Origin
+	tc.Origin
 }
 
 func GetTypeSingleton() api.CRUDFactory {
 	return func(reqInfo *api.APIInfo) api.CRUDer {
-		toReturn := TOOrigin{reqInfo, v13.Origin{}}
+		toReturn := TOOrigin{reqInfo, tc.Origin{}}
 		return &toReturn
 	}
 }
@@ -143,8 +142,8 @@ func (origin *TOOrigin) IsTenantAuthorized(user *auth.CurrentUser) (bool, error)
 }
 
 // filterAuthorized will filter a slice of Origins based upon tenant. It assumes that tenancy is enabled
-func filterAuthorized(origins []v13.Origin, user *auth.CurrentUser, tx *sqlx.Tx) ([]v13.Origin, error) {
-	newOrigins := []v13.Origin{}
+func filterAuthorized(origins []tc.Origin, user *auth.CurrentUser, tx *sqlx.Tx) ([]tc.Origin, error) {
+	newOrigins := []tc.Origin{}
 	for _, origin := range origins {
 		if origin.TenantID == nil {
 			if origin.ID == nil {
@@ -200,7 +199,7 @@ func (origin *TOOrigin) Read(params map[string]string) ([]interface{}, []error,
 	return returnable, nil, tc.NoError
 }
 
-func getOrigins(params map[string]string, tx *sqlx.Tx, privLevel int) ([]v13.Origin, []error, tc.ApiErrorType) {
+func getOrigins(params map[string]string, tx *sqlx.Tx, privLevel int) ([]tc.Origin, []error, tc.ApiErrorType) {
 	var rows *sqlx.Rows
 	var err error
 
@@ -231,10 +230,10 @@ func getOrigins(params map[string]string, tx *sqlx.Tx, privLevel int) ([]v13.Ori
 	}
 	defer rows.Close()
 
-	origins := []v13.Origin{}
+	origins := []tc.Origin{}
 
 	for rows.Next() {
-		var s v13.Origin
+		var s tc.Origin
 		if err = rows.StructScan(&s); err != nil {
 			return nil, []error{fmt.Errorf("getting origins: %v", err)}, tc.SystemError
 		}
diff --git a/traffic_ops/traffic_ops_golang/origin/origins_test.go b/traffic_ops/traffic_ops_golang/origin/origins_test.go
index 7280e60cb..35368c5c4 100644
--- a/traffic_ops/traffic_ops_golang/origin/origins_test.go
+++ b/traffic_ops/traffic_ops_golang/origin/origins_test.go
@@ -28,7 +28,6 @@ import (
 
 	"github.com/apache/trafficcontrol/lib/go-log"
 	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/lib/go-util"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/auth"
@@ -38,9 +37,9 @@ import (
 	"gopkg.in/DATA-DOG/go-sqlmock.v1"
 )
 
-func getTestOrigins() []v13.Origin {
-	origins := []v13.Origin{}
-	testOrigin := v13.Origin{
+func getTestOrigins() []tc.Origin {
+	origins := []tc.Origin{}
+	testOrigin := tc.Origin{
 		Cachegroup:        util.StrPtr("Cachegroup"),
 		CachegroupID:      util.IntPtr(1),
 		Coordinate:        util.StrPtr("originCoordinate"),
@@ -87,7 +86,7 @@ func TestReadOrigins(t *testing.T) {
 	defer db.Close()
 
 	testOrigins := getTestOrigins()
-	cols := test.ColsFromStructByTag("db", v13.Origin{})
+	cols := test.ColsFromStructByTag("db", tc.Origin{})
 	rows := sqlmock.NewRows(cols)
 
 	for _, to := range testOrigins {
@@ -176,7 +175,7 @@ func TestValidate(t *testing.T) {
 	const ip6Err = `'ip6Address' must be a valid IPv6 address`
 
 	// verify that non-null fields are invalid
-	c := TOOrigin{Origin: v13.Origin{ID: nil,
+	c := TOOrigin{Origin: tc.Origin{ID: nil,
 		Name:              nil,
 		DeliveryServiceID: nil,
 		FQDN:              nil,
@@ -204,7 +203,7 @@ func TestValidate(t *testing.T) {
 	port := 65535
 	pro := "http"
 	lu := tc.TimeNoMod{Time: time.Now()}
-	c = TOOrigin{Origin: v13.Origin{ID: &id,
+	c = TOOrigin{Origin: tc.Origin{ID: &id,
 		Name:              &nm,
 		DeliveryServiceID: &id,
 		FQDN:              &fqdn,
diff --git a/traffic_ops/traffic_ops_golang/profile/profiles.go b/traffic_ops/traffic_ops_golang/profile/profiles.go
index beea21031..c85c5e0e5 100644
--- a/traffic_ops/traffic_ops_golang/profile/profiles.go
+++ b/traffic_ops/traffic_ops_golang/profile/profiles.go
@@ -27,7 +27,6 @@ import (
 	"github.com/apache/trafficcontrol/lib/go-log"
 	"github.com/apache/trafficcontrol/lib/go-tc"
 	"github.com/apache/trafficcontrol/lib/go-tc/tovalidate"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/lib/go-util"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/auth"
@@ -51,12 +50,12 @@ const (
 //we need a type alias to define functions on
 type TOProfile struct {
 	ReqInfo *api.APIInfo `json:"-"`
-	v13.ProfileNullable
+	tc.ProfileNullable
 }
 
 func GetTypeSingleton() api.CRUDFactory {
 	return func(reqInfo *api.APIInfo) api.CRUDer {
-		toReturn := TOProfile{reqInfo, v13.ProfileNullable{}}
+		toReturn := TOProfile{reqInfo, tc.ProfileNullable{}}
 		return &toReturn
 	}
 }
@@ -139,10 +138,10 @@ func (prof *TOProfile) Read(parameters map[string]string) ([]interface{}, []erro
 	}
 	defer rows.Close()
 
-	profiles := []v13.ProfileNullable{}
+	profiles := []tc.ProfileNullable{}
 
 	for rows.Next() {
-		var p v13.ProfileNullable
+		var p tc.ProfileNullable
 		if err = rows.StructScan(&p); err != nil {
 			log.Errorf("error parsing Profile rows: %v", err)
 			return nil, []error{tc.DBError}, tc.SystemError
@@ -185,7 +184,7 @@ LEFT JOIN cdn c ON prof.cdn = c.id`
 	return query
 }
 
-func ReadParameters(tx *sqlx.Tx, parameters map[string]string, user *auth.CurrentUser, profile v13.ProfileNullable) ([]v13.ParameterNullable, []error) {
+func ReadParameters(tx *sqlx.Tx, parameters map[string]string, user *auth.CurrentUser, profile tc.ProfileNullable) ([]tc.ParameterNullable, []error) {
 
 	var rows *sqlx.Rows
 	privLevel := user.PrivLevel
@@ -200,9 +199,9 @@ func ReadParameters(tx *sqlx.Tx, parameters map[string]string, user *auth.Curren
 	}
 	defer rows.Close()
 
-	var params []v13.ParameterNullable
+	var params []tc.ParameterNullable
 	for rows.Next() {
-		var param v13.ParameterNullable
+		var param tc.ParameterNullable
 
 		if err = rows.StructScan(&param); err != nil {
 			log.Errorf("error parsing parameter rows: %v", err)
diff --git a/traffic_ops/traffic_ops_golang/profileparameter/profile_parameters.go b/traffic_ops/traffic_ops_golang/profileparameter/profile_parameters.go
index af7d8393e..f7b5a8f8e 100644
--- a/traffic_ops/traffic_ops_golang/profileparameter/profile_parameters.go
+++ b/traffic_ops/traffic_ops_golang/profileparameter/profile_parameters.go
@@ -27,7 +27,6 @@ import (
 	"github.com/apache/trafficcontrol/lib/go-log"
 	"github.com/apache/trafficcontrol/lib/go-tc"
 	"github.com/apache/trafficcontrol/lib/go-tc/tovalidate"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/lib/go-util"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/dbhelpers"
@@ -45,12 +44,12 @@ const (
 //we need a type alias to define functions on
 type TOProfileParameter struct {
 	ReqInfo *api.APIInfo `json:"-"`
-	v13.ProfileParameterNullable
+	tc.ProfileParameterNullable
 }
 
 func GetTypeSingleton() api.CRUDFactory {
 	return func(reqInfo *api.APIInfo) api.CRUDer {
-		toReturn := TOProfileParameter{reqInfo, v13.ProfileParameterNullable{}}
+		toReturn := TOProfileParameter{reqInfo, tc.ProfileParameterNullable{}}
 		return &toReturn
 	}
 }
diff --git a/traffic_ops/traffic_ops_golang/profileparameter/profile_parameters_test.go b/traffic_ops/traffic_ops_golang/profileparameter/profile_parameters_test.go
index a3f53ebac..718e98aad 100644
--- a/traffic_ops/traffic_ops_golang/profileparameter/profile_parameters_test.go
+++ b/traffic_ops/traffic_ops_golang/profileparameter/profile_parameters_test.go
@@ -24,7 +24,6 @@ import (
 	"time"
 
 	"github.com/apache/trafficcontrol/lib/go-tc"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/lib/go-util"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/test"
@@ -33,14 +32,14 @@ import (
 	sqlmock "gopkg.in/DATA-DOG/go-sqlmock.v1"
 )
 
-func getTestProfileParameters() []v13.ProfileParameterNullable {
-	pps := []v13.ProfileParameterNullable{}
+func getTestProfileParameters() []tc.ProfileParameterNullable {
+	pps := []tc.ProfileParameterNullable{}
 	lastUpdated := tc.TimeNoMod{}
 	lastUpdated.Scan(time.Now())
 	profileID := 1
 	parameterID := 1
 
-	pp := v13.ProfileParameterNullable{
+	pp := tc.ProfileParameterNullable{
 		LastUpdated: &lastUpdated,
 		ProfileID:   &profileID,
 		ParameterID: &parameterID,
diff --git a/traffic_ops/traffic_ops_golang/role/roles.go b/traffic_ops/traffic_ops_golang/role/roles.go
index 72c29042b..fba6a4755 100644
--- a/traffic_ops/traffic_ops_golang/role/roles.go
+++ b/traffic_ops/traffic_ops_golang/role/roles.go
@@ -27,7 +27,6 @@ import (
 	"github.com/apache/trafficcontrol/lib/go-log"
 	"github.com/apache/trafficcontrol/lib/go-tc"
 	"github.com/apache/trafficcontrol/lib/go-tc/tovalidate"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/lib/go-util"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/dbhelpers"
@@ -40,12 +39,12 @@ import (
 //we need a type alias to define functions on
 type TORole struct {
 	ReqInfo *api.APIInfo `json:"-"`
-	v13.Role
+	tc.Role
 }
 
 func GetTypeSingleton() api.CRUDFactory {
 	return func(reqInfo *api.APIInfo) api.CRUDer {
-		toReturn := TORole{reqInfo, v13.Role{}}
+		toReturn := TORole{reqInfo, tc.Role{}}
 		return &toReturn
 	}
 }
diff --git a/traffic_ops/traffic_ops_golang/role/roles_test.go b/traffic_ops/traffic_ops_golang/role/roles_test.go
index 5f9e9f7d1..cdc91d784 100644
--- a/traffic_ops/traffic_ops_golang/role/roles_test.go
+++ b/traffic_ops/traffic_ops_golang/role/roles_test.go
@@ -25,7 +25,7 @@ import (
 	"strings"
 	"testing"
 
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 	"github.com/apache/trafficcontrol/lib/go-util"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/test"
@@ -38,8 +38,8 @@ func intAddr(i int) *int {
 	return &i
 }
 
-func getTestRoles() []v13.Role {
-	roles := []v13.Role{
+func getTestRoles() []tc.Role {
+	roles := []tc.Role{
 		{
 			ID:          intAddr(1),
 			Name:        stringAddr("role1"),
@@ -98,7 +98,7 @@ func TestValidate(t *testing.T) {
 	// invalid name, empty domainname
 	n := "not_a_valid_role"
 	reqInfo := api.APIInfo{}
-	r := TORole{ReqInfo: &reqInfo, Role: v13.Role{Name: &n}}
+	r := TORole{ReqInfo: &reqInfo, Role: tc.Role{Name: &n}}
 	errs := util.JoinErrsStr(test.SortErrors(test.SplitErrors(r.Validate())))
 
 	expectedErrs := util.JoinErrsStr([]error{
@@ -111,7 +111,7 @@ func TestValidate(t *testing.T) {
 	}
 
 	//  name,  domainname both valid
-	r = TORole{ReqInfo: &reqInfo, Role: v13.Role{Name: stringAddr("this is a valid name"), Description: stringAddr("this is a description"), PrivLevel: intAddr(30)}}
+	r = TORole{ReqInfo: &reqInfo, Role: tc.Role{Name: stringAddr("this is a valid name"), Description: stringAddr("this is a description"), PrivLevel: intAddr(30)}}
 	err := r.Validate()
 	if err != nil {
 		t.Errorf("expected nil, got %s", err)
diff --git a/traffic_ops/traffic_ops_golang/server/servers.go b/traffic_ops/traffic_ops_golang/server/servers.go
index 34361c5c9..5053862ef 100644
--- a/traffic_ops/traffic_ops_golang/server/servers.go
+++ b/traffic_ops/traffic_ops_golang/server/servers.go
@@ -29,7 +29,6 @@ import (
 	"github.com/apache/trafficcontrol/lib/go-log"
 	"github.com/apache/trafficcontrol/lib/go-tc"
 	"github.com/apache/trafficcontrol/lib/go-tc/tovalidate"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/lib/go-util"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/auth"
@@ -45,12 +44,12 @@ import (
 //we need a type alias to define functions on
 type TOServer struct {
 	ReqInfo *api.APIInfo `json:"-"`
-	v13.ServerNullable
+	tc.ServerNullable
 }
 
 func GetTypeSingleton() api.CRUDFactory {
 	return func(reqInfo *api.APIInfo) api.CRUDer {
-		toReturn := TOServer{reqInfo, v13.ServerNullable{}}
+		toReturn := TOServer{reqInfo, tc.ServerNullable{}}
 		return &toReturn
 	}
 }
diff --git a/traffic_ops/traffic_ops_golang/staticdnsentry/staticdnsentry.go b/traffic_ops/traffic_ops_golang/staticdnsentry/staticdnsentry.go
index 186f8c823..ffe925f77 100644
--- a/traffic_ops/traffic_ops_golang/staticdnsentry/staticdnsentry.go
+++ b/traffic_ops/traffic_ops_golang/staticdnsentry/staticdnsentry.go
@@ -27,7 +27,6 @@ import (
 	"github.com/apache/trafficcontrol/lib/go-log"
 	"github.com/apache/trafficcontrol/lib/go-tc"
 	"github.com/apache/trafficcontrol/lib/go-tc/tovalidate"
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
 	"github.com/apache/trafficcontrol/lib/go-util"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
 	"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/dbhelpers"
@@ -38,12 +37,12 @@ import (
 
 type TOStaticDNSEntry struct {
 	ReqInfo *api.APIInfo `json:"-"`
-	v13.StaticDNSEntryNullable
+	tc.StaticDNSEntryNullable
 }
 
 func GetTypeSingleton() api.CRUDFactory {
 	return func(reqInfo *api.APIInfo) api.CRUDer {
-		toReturn := TOStaticDNSEntry{reqInfo, v13.StaticDNSEntryNullable{}}
+		toReturn := TOStaticDNSEntry{reqInfo, tc.StaticDNSEntryNullable{}}
 		return &toReturn
 	}
 }
@@ -137,7 +136,7 @@ func (staticDNSEntry *TOStaticDNSEntry) Read(parameters map[string]string) ([]in
 	defer rows.Close()
 	staticDNSEntries := []interface{}{}
 	for rows.Next() {
-		s := v13.StaticDNSEntryNullable{}
+		s := tc.StaticDNSEntryNullable{}
 		if err = rows.StructScan(&s); err != nil {
 			log.Errorln("error parsing StaticDNSEntry rows: " + err.Error())
 			return nil, []error{tc.DBError}, tc.SystemError
diff --git a/traffic_ops/traffic_ops_golang/swaggerdocs/v13/asns.go b/traffic_ops/traffic_ops_golang/swaggerdocs/v13/asns.go
index 7ee23e459..4a591c20b 100644
--- a/traffic_ops/traffic_ops_golang/swaggerdocs/v13/asns.go
+++ b/traffic_ops/traffic_ops_golang/swaggerdocs/v13/asns.go
@@ -1,6 +1,6 @@
 package v13
 
-import "github.com/apache/trafficcontrol/lib/go-tc/v13"
+import "github.com/apache/trafficcontrol/lib/go-tc"
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -27,7 +27,7 @@ import "github.com/apache/trafficcontrol/lib/go-tc/v13"
 type ASNs struct {
 	// ASN Response Body
 	// in: body
-	ASNsResponse v13.ASNsResponse `json:"response"`
+	ASNsResponse tc.ASNsResponse `json:"response"`
 }
 
 // ASN -  ASNResponse to get the "response" top level key
@@ -36,7 +36,7 @@ type ASNs struct {
 type ASN struct {
 	// ASN Response Body
 	// in: body
-	ASNResponse v13.ASNResponse
+	ASNResponse tc.ASNResponse
 }
 
 // ASNQueryParams
@@ -73,7 +73,7 @@ type ASNPostParam struct {
 	//
 	// in: body
 	// required: true
-	ASN v13.ASN
+	ASN tc.ASN
 }
 
 // swagger:parameters GetASNById DeleteASN
@@ -120,7 +120,7 @@ type ASNPutParam struct {
 	//
 	// in: body
 	// required: true
-	ASN v13.ASN
+	ASN tc.ASN
 }
 
 // PutASN swagger:route PUT /asns/{id} ASN PutASN
diff --git a/traffic_ops/traffic_ops_golang/swaggerdocs/v13/cdns.go b/traffic_ops/traffic_ops_golang/swaggerdocs/v13/cdns.go
index 452ca854e..a7946c36a 100644
--- a/traffic_ops/traffic_ops_golang/swaggerdocs/v13/cdns.go
+++ b/traffic_ops/traffic_ops_golang/swaggerdocs/v13/cdns.go
@@ -19,7 +19,7 @@ package v13
  * under the License.
  */
 
-import v13 "github.com/apache/trafficcontrol/lib/go-tc/v13"
+import "github.com/apache/trafficcontrol/lib/go-tc"
 
 // CDNs -  CDNsResponse to get the "response" top level key
 // swagger:response CDNs
@@ -27,7 +27,7 @@ import v13 "github.com/apache/trafficcontrol/lib/go-tc/v13"
 type CDNs struct {
 	// CDN Response Body
 	// in: body
-	CDNsResponse v13.CDNsResponse `json:"response"`
+	CDNsResponse tc.CDNsResponse `json:"response"`
 }
 
 // CDN -  CDNResponse to get the "response" top level key
@@ -36,7 +36,7 @@ type CDNs struct {
 type CDN struct {
 	// CDN Response Body
 	// in: body
-	CDNResponse v13.CDNResponse
+	CDNResponse tc.CDNResponse
 }
 
 // CDNQueryParams
@@ -73,7 +73,7 @@ type CDNPostParam struct {
 	//
 	// in: body
 	// required: true
-	CDN v13.CDN
+	CDN tc.CDN
 }
 
 // swagger:parameters GetCDNById DeleteCDN
@@ -120,7 +120,7 @@ type CDNPutParam struct {
 	//
 	// in: body
 	// required: true
-	CDN v13.CDN
+	CDN tc.CDN
 }
 
 // PutCDN swagger:route PUT /cdns/{id} CDN PutCDN
diff --git a/traffic_ops/traffic_ops_golang/swaggerdocs/v13/divisions.go b/traffic_ops/traffic_ops_golang/swaggerdocs/v13/divisions.go
index a4d3a95a8..63e4091d1 100644
--- a/traffic_ops/traffic_ops_golang/swaggerdocs/v13/divisions.go
+++ b/traffic_ops/traffic_ops_golang/swaggerdocs/v13/divisions.go
@@ -1,6 +1,6 @@
 package v13
 
-import v13 "github.com/apache/trafficcontrol/lib/go-tc/v13"
+import "github.com/apache/trafficcontrol/lib/go-tc"
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -27,7 +27,7 @@ import v13 "github.com/apache/trafficcontrol/lib/go-tc/v13"
 type Divisions struct {
 	// Division Response Body
 	// in: body
-	DivisionsResponse v13.DivisionsResponse `json:"response"`
+	DivisionsResponse tc.DivisionsResponse `json:"response"`
 }
 
 // Division -  DivisionResponse to get the "response" top level key
@@ -36,7 +36,7 @@ type Divisions struct {
 type Division struct {
 	// Division Response Body
 	// in: body
-	DivisionResponse v13.DivisionResponse
+	DivisionResponse tc.DivisionResponse
 }
 
 // DivisionQueryParams
@@ -65,7 +65,7 @@ type DivisionPostParam struct {
 	//
 	// in: body
 	// required: true
-	Division v13.Division
+	Division tc.Division
 }
 
 // swagger:parameters GetDivisionById DeleteDivision
@@ -112,7 +112,7 @@ type DivisionPutParam struct {
 	//
 	// in: body
 	// required: true
-	Division v13.Division
+	Division tc.Division
 }
 
 // PutDivision swagger:route PUT /divisions/{id} Division PutDivision
diff --git a/traffic_ops/traffic_ops_golang/swaggerdocs/v13/physlocations.go b/traffic_ops/traffic_ops_golang/swaggerdocs/v13/physlocations.go
index 06ba02d45..b2dd77306 100644
--- a/traffic_ops/traffic_ops_golang/swaggerdocs/v13/physlocations.go
+++ b/traffic_ops/traffic_ops_golang/swaggerdocs/v13/physlocations.go
@@ -19,7 +19,7 @@ package v13
  * under the License.
  */
 
-import v13 "github.com/apache/trafficcontrol/lib/go-tc/v13"
+import "github.com/apache/trafficcontrol/lib/go-tc"
 
 // PhysLocations -  PhysLocationsResponse to get the "response" top level key
 // swagger:response PhysLocations
@@ -27,7 +27,7 @@ import v13 "github.com/apache/trafficcontrol/lib/go-tc/v13"
 type PhysLocations struct {
 	// PhysLocation Response Body
 	// in: body
-	PhysLocationsResponse v13.PhysLocationsResponse `json:"response"`
+	PhysLocationsResponse tc.PhysLocationsResponse `json:"response"`
 }
 
 // PhysLocation -  PhysLocationResponse to get the "response" top level key
@@ -36,7 +36,7 @@ type PhysLocations struct {
 type PhysLocation struct {
 	// PhysLocation Response Body
 	// in: body
-	PhysLocationResponse v13.PhysLocationResponse
+	PhysLocationResponse tc.PhysLocationResponse
 }
 
 // PhysLocationQueryParams
@@ -61,7 +61,7 @@ type PhysLocationPostParam struct {
 	//
 	// in: body
 	// required: true
-	PhysLocation v13.PhysLocationNullable
+	PhysLocation tc.PhysLocationNullable
 }
 
 // swagger:parameters GetPhysLocationById DeletePhysLocation
@@ -108,7 +108,7 @@ type PhysLocationPutParam struct {
 	//
 	// in: body
 	// required: true
-	PhysLocation v13.PhysLocationNullable
+	PhysLocation tc.PhysLocationNullable
 }
 
 // PutPhysLocation swagger:route PUT /phys_locations/{id} PhysLocation PutPhysLocation
diff --git a/traffic_ops/traffic_ops_golang/swaggerdocs/v13/profileparameters.go b/traffic_ops/traffic_ops_golang/swaggerdocs/v13/profileparameters.go
index 879d483d7..c1720043f 100644
--- a/traffic_ops/traffic_ops_golang/swaggerdocs/v13/profileparameters.go
+++ b/traffic_ops/traffic_ops_golang/swaggerdocs/v13/profileparameters.go
@@ -1,6 +1,6 @@
 package v13
 
-import v13 "github.com/apache/trafficcontrol/lib/go-tc/v13"
+import "github.com/apache/trafficcontrol/lib/go-tc"
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -27,7 +27,7 @@ import v13 "github.com/apache/trafficcontrol/lib/go-tc/v13"
 type ProfileParameters struct {
 	// ProfileParameter Response Body
 	// in: body
-	ProfileParametersResponse v13.ProfileParametersResponse `json:"response"`
+	ProfileParametersResponse tc.ProfileParametersResponse `json:"response"`
 }
 
 // ProfileParameter -  ProfileParameterResponse to get the "response" top level key
@@ -36,7 +36,7 @@ type ProfileParameters struct {
 type ProfileParameter struct {
 	// ProfileParameter Response Body
 	// in: body
-	ProfileParameterResponse v13.ProfileParameterResponse
+	ProfileParameterResponse tc.ProfileParameterResponse
 }
 
 // ProfileParameterQueryParams
@@ -65,7 +65,7 @@ type ProfileParameterPostParam struct {
 	//
 	// in: body
 	// required: true
-	ProfileParameter v13.ProfileParameter
+	ProfileParameter tc.ProfileParameter
 }
 
 // PostProfileParameter swagger:route POST /profileparameters ProfileParameter PostProfileParameter
diff --git a/traffic_ops/traffic_ops_golang/swaggerdocs/v13/profiles.go b/traffic_ops/traffic_ops_golang/swaggerdocs/v13/profiles.go
index 46092660e..1a1b1a763 100644
--- a/traffic_ops/traffic_ops_golang/swaggerdocs/v13/profiles.go
+++ b/traffic_ops/traffic_ops_golang/swaggerdocs/v13/profiles.go
@@ -19,7 +19,7 @@ package v13
  * under the License.
  */
 
-import v13 "github.com/apache/trafficcontrol/lib/go-tc/v13"
+import "github.com/apache/trafficcontrol/lib/go-tc"
 
 // Profiles -  ProfilesResponse to get the "response" top level key
 // swagger:response Profiles
@@ -27,7 +27,7 @@ import v13 "github.com/apache/trafficcontrol/lib/go-tc/v13"
 type Profiles struct {
 	// Profile Response Body
 	// in: body
-	ProfilesResponse v13.ProfilesResponse `json:"response"`
+	ProfilesResponse tc.ProfilesResponse `json:"response"`
 }
 
 // Profile -  ProfileResponse to get the "response" top level key
@@ -36,7 +36,7 @@ type Profiles struct {
 type Profile struct {
 	// Profile Response Body
 	// in: body
-	ProfileResponse v13.ProfileResponse
+	ProfileResponse tc.ProfileResponse
 }
 
 // ProfileQueryParams
@@ -73,7 +73,7 @@ type ProfilePostParam struct {
 	//
 	// in: body
 	// required: true
-	Profile v13.Profile
+	Profile tc.Profile
 }
 
 // swagger:parameters GetProfileById DeleteProfile
@@ -120,7 +120,7 @@ type ProfilePutParam struct {
 	//
 	// in: body
 	// required: true
-	Profile v13.Profile
+	Profile tc.Profile
 }
 
 // PutProfile swagger:route PUT /cdns/{id} Profile PutProfile
diff --git a/traffic_ops/traffic_ops_golang/swaggerdocs/v13/regions.go b/traffic_ops/traffic_ops_golang/swaggerdocs/v13/regions.go
index 1c6f0d7d8..b1e3194c3 100644
--- a/traffic_ops/traffic_ops_golang/swaggerdocs/v13/regions.go
+++ b/traffic_ops/traffic_ops_golang/swaggerdocs/v13/regions.go
@@ -1,6 +1,6 @@
 package v13
 
-import "github.com/apache/trafficcontrol/lib/go-tc/v13"
+import "github.com/apache/trafficcontrol/lib/go-tc"
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -27,7 +27,7 @@ import "github.com/apache/trafficcontrol/lib/go-tc/v13"
 type Regions struct {
 	// Region Response Body
 	// in: body
-	RegionsResponse v13.RegionsResponse `json:"response"`
+	RegionsResponse tc.RegionsResponse `json:"response"`
 }
 
 // Region -  RegionResponse to get the "response" top level key
@@ -36,7 +36,7 @@ type Regions struct {
 type Region struct {
 	// Region Response Body
 	// in: body
-	RegionResponse v13.RegionResponse
+	RegionResponse tc.RegionsResponse
 }
 
 // RegionQueryParams
@@ -69,7 +69,7 @@ type RegionPostParam struct {
 	//
 	// in: body
 	// required: true
-	Region v13.Region
+	Region tc.Region
 }
 
 // swagger:parameters GetRegionById DeleteRegion
@@ -112,7 +112,7 @@ type RegionPutParam struct {
 	//
 	// in: body
 	// required: true
-	Region v13.Region
+	Region tc.Region
 }
 
 // PutRegion swagger:route PUT /regions/{id} Region PutRegion
diff --git a/traffic_ops/traffic_ops_golang/swaggerdocs/v13/statuses.go b/traffic_ops/traffic_ops_golang/swaggerdocs/v13/statuses.go
index f8cce6bf2..24c181e72 100644
--- a/traffic_ops/traffic_ops_golang/swaggerdocs/v13/statuses.go
+++ b/traffic_ops/traffic_ops_golang/swaggerdocs/v13/statuses.go
@@ -20,7 +20,7 @@ package v13
  */
 
 import (
-	"github.com/apache/trafficcontrol/lib/go-tc/v13"
+	"github.com/apache/trafficcontrol/lib/go-tc"
 )
 
 // Statuses -  StatusesResponse to get the "response" top level key
@@ -29,7 +29,7 @@ import (
 type Statuses struct {
 	// Status Response Body
 	// in: body
-	StatusesResponse v13.StatusesResponse `json:"response"`
+	StatusesResponse tc.StatusesResponse `json:"response"`
 }
 
 // Status -  StatusResponse to get the "response" top level key
@@ -38,7 +38,7 @@ type Statuses struct {
 type Status struct {
 	// Status Response Body
 	// in: body
-	StatusResponse v13.StatusResponse
+	StatusResponse tc.StatusResponse
 }
 
 // StatusQueryParams
@@ -71,7 +71,7 @@ type StatusPostParam struct {
 	//
 	// in: body
 	// required: true
-	Status v13.Status
+	Status tc.Status
 }
 
 // swagger:parameters GetStatusById DeleteStatus
@@ -114,7 +114,7 @@ type StatusPutParam struct {
 	//
 	// in: body
 	// required: true
-	Status v13.Status
+	Status tc.Status
 }
 
 // PutStatus swagger:route PUT /statuses/{id} Status PutStatus
diff --git a/traffic_ops/traffic_ops_golang/tenant/tenancy.go b/traffic_ops/traffic_ops_golang/tenant/tenancy.go
index 7fdc81296..b269dc1be 100644
--- a/traffic_ops/traffic_ops_golang/tenant/tenancy.go
+++ b/traffic_ops/traffic_ops_golang/tenant/tenancy.go
@@ -47,7 +47,8 @@ func (dsInfo DeliveryServiceTenantInfo) IsTenantAuthorized(user *auth.CurrentUse
 
 // GetDeliveryServiceTenantInfo returns tenant information for a deliveryservice
 func GetDeliveryServiceTenantInfo(xmlID string, tx *sql.Tx) (*DeliveryServiceTenantInfo, error) {
-	ds := DeliveryServiceTenantInfo{XMLID: util.StrPtr(xmlID)}
+	ds := DeliveryServiceTenantInfo{}
+	ds.XMLID = util.StrPtr(xmlID)
 	if err := tx.QueryRow(`SELECT tenant_id FROM deliveryservice where xml_id = $1`, &ds.XMLID).Scan(&ds.TenantID); err != nil {
 		if err == sql.ErrNoRows {
 			return &ds, errors.New("a deliveryservice with xml_id '" + xmlID + "' was not found")
diff --git a/traffic_ops/traffic_ops_golang/user/deliveryservices.go b/traffic_ops/traffic_ops_golang/user/deliveryservices.go
index 2b5235557..5812d82dc 100644
--- a/traffic_ops/traffic_ops_golang/user/deliveryservices.go
+++ b/traffic_ops/traffic_ops_golang/user/deliveryservices.go
@@ -76,8 +76,8 @@ func GetAvailableDSes(w http.ResponseWriter, r *http.Request) {
 	api.WriteResp(w, r, dses)
 }
 
-func filterAuthorized(tx *sql.Tx, dses []tc.DeliveryServiceNullableV13, user *auth.CurrentUser) ([]tc.DeliveryServiceNullableV13, error) {
-	authorizedDSes := []tc.DeliveryServiceNullableV13{}
+func filterAuthorized(tx *sql.Tx, dses []tc.DeliveryServiceNullable, user *auth.CurrentUser) ([]tc.DeliveryServiceNullable, error) {
+	authorizedDSes := []tc.DeliveryServiceNullable{}
 	for _, ds := range dses {
 		if ds.TenantID == nil {
 			continue
@@ -112,7 +112,7 @@ func filterAvailableAuthorized(tx *sql.Tx, dses []tc.UserAvailableDS, user *auth
 	return authorizedDSes, nil
 }
 
-func getUserDSes(tx *sql.Tx, userID int) ([]tc.DeliveryServiceNullableV13, error) {
+func getUserDSes(tx *sql.Tx, userID int) ([]tc.DeliveryServiceNullable, error) {
 	q := `
 SELECT
 ds.active,
@@ -189,9 +189,9 @@ WHERE dsu.tm_user_id = $1
 		return nil, errors.New("querying user delivery services: " + err.Error())
 	}
 	defer rows.Close()
-	dses := []tc.DeliveryServiceNullableV13{}
+	dses := []tc.DeliveryServiceNullable{}
 	for rows.Next() {
-		ds := tc.DeliveryServiceNullableV13{}
+		ds := tc.DeliveryServiceNullable{}
 		err := rows.Scan(&ds.Active, &ds.AnonymousBlockingEnabled, &ds.CacheURL, &ds.CCRDNSTTL, &ds.CDNID, &ds.CDNName, &ds.CheckPath, &ds.DeepCachingType, &ds.DisplayName, &ds.DNSBypassCNAME, &ds.DNSBypassIP, &ds.DNSBypassIP6, &ds.DNSBypassTTL, &ds.DSCP, &ds.EdgeHeaderRewrite, &ds.GeoLimitRedirectURL, &ds.GeoLimit, &ds.GeoLimitCountries, &ds.GeoProvider, &ds.GlobalMaxMBPS, &ds.GlobalMaxTPS, &ds.FQPacingRate, &ds.HTTPBypassFQDN, &ds.ID, &ds.InfoURL, &ds.InitialDispersion, &ds.IPV6RoutingEnabled, &ds.LastUpdated, &ds.LogsEnabled, &ds.LongDesc, &ds.LongDesc1, &ds.LongDesc2, &ds.MaxDNSAnswers, &ds.MidHeaderRewrite, &ds.MissLat, &ds.MissLong, &ds.MultiSiteOrigin, &ds.OrgServerFQDN, &ds.OriginShield, &ds.ProfileID, &ds.ProfileName, &ds.ProfileDesc, &ds.Protocol, &ds.QStringIgnore, &ds.RangeRequestHandling, &ds.RegexRemap, &ds.RegionalGeoBlocking, &ds.RemapText, &ds.RoutingName, &ds.SigningAlgorithm, &ds.SSLKeyVersion, &ds.TenantID, &ds.Tenant, &ds.TRRequestHeaders, &ds.TRResponseHeaders, &ds.Type, &ds.TypeID, &ds.XMLID)
 		if err != nil {
 			return nil, errors.New("scanning user delivery services : " + err.Error())


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services