vendorify
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/aggregate.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/aggregate.go
new file mode 100644
index 0000000..d0c730b
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/aggregate.go
@@ -0,0 +1,192 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Aggregate aggregate
+// swagger:model Aggregate
+type Aggregate struct {
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Date added
+	DateAdded strfmt.Date `json:"date_added,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// Family
+	// Required: true
+	Family *int64 `json:"family"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Prefix
+	// Required: true
+	Prefix *string `json:"prefix"`
+
+	// rir
+	// Required: true
+	Rir *NestedRIR `json:"rir"`
+}
+
+// Validate validates this aggregate
+func (m *Aggregate) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateFamily(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePrefix(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRir(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Aggregate) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var aggregateTypeFamilyPropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[4,6]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		aggregateTypeFamilyPropEnum = append(aggregateTypeFamilyPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *Aggregate) validateFamilyEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, aggregateTypeFamilyPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *Aggregate) validateFamily(formats strfmt.Registry) error {
+
+	if err := validate.Required("family", "body", m.Family); err != nil {
+		return err
+	}
+
+	// value enum
+	if err := m.validateFamilyEnum("family", "body", *m.Family); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Aggregate) validatePrefix(formats strfmt.Registry) error {
+
+	if err := validate.Required("prefix", "body", m.Prefix); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Aggregate) validateRir(formats strfmt.Registry) error {
+
+	if err := validate.Required("rir", "body", m.Rir); err != nil {
+		return err
+	}
+
+	if m.Rir != nil {
+
+		if err := m.Rir.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("rir")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Aggregate) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Aggregate) UnmarshalBinary(b []byte) error {
+	var res Aggregate
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuit.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuit.go
new file mode 100644
index 0000000..c3c5953
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuit.go
@@ -0,0 +1,266 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Circuit circuit
+// swagger:model Circuit
+type Circuit struct {
+
+	// Circuit ID
+	// Required: true
+	// Max Length: 50
+	Cid *string `json:"cid"`
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Commit rate (Kbps)
+	// Maximum: 2.147483647e+09
+	// Minimum: 0
+	CommitRate *int64 `json:"commit_rate,omitempty"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Date installed
+	InstallDate strfmt.Date `json:"install_date,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// provider
+	// Required: true
+	Provider *NestedProvider `json:"provider"`
+
+	// status
+	// Required: true
+	Status *CircuitStatus `json:"status"`
+
+	// tenant
+	// Required: true
+	Tenant *NestedTenant `json:"tenant"`
+
+	// type
+	// Required: true
+	Type *NestedCircuitType `json:"type"`
+}
+
+// Validate validates this circuit
+func (m *Circuit) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCid(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateCommitRate(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateProvider(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateTenant(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Circuit) validateCid(formats strfmt.Registry) error {
+
+	if err := validate.Required("cid", "body", m.Cid); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("cid", "body", string(*m.Cid), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Circuit) validateCommitRate(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.CommitRate) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("commit_rate", "body", int64(*m.CommitRate), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("commit_rate", "body", int64(*m.CommitRate), 2.147483647e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Circuit) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Circuit) validateProvider(formats strfmt.Registry) error {
+
+	if err := validate.Required("provider", "body", m.Provider); err != nil {
+		return err
+	}
+
+	if m.Provider != nil {
+
+		if err := m.Provider.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("provider")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Circuit) validateStatus(formats strfmt.Registry) error {
+
+	if err := validate.Required("status", "body", m.Status); err != nil {
+		return err
+	}
+
+	if m.Status != nil {
+
+		if err := m.Status.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("status")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Circuit) validateTenant(formats strfmt.Registry) error {
+
+	if err := validate.Required("tenant", "body", m.Tenant); err != nil {
+		return err
+	}
+
+	if m.Tenant != nil {
+
+		if err := m.Tenant.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("tenant")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Circuit) validateType(formats strfmt.Registry) error {
+
+	if err := validate.Required("type", "body", m.Type); err != nil {
+		return err
+	}
+
+	if m.Type != nil {
+
+		if err := m.Type.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("type")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Circuit) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Circuit) UnmarshalBinary(b []byte) error {
+	var res Circuit
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuit_status.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuit_status.go
new file mode 100644
index 0000000..e309e96
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuit_status.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// CircuitStatus Status
+// swagger:model circuitStatus
+type CircuitStatus struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this circuit status
+func (m *CircuitStatus) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *CircuitStatus) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *CircuitStatus) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *CircuitStatus) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *CircuitStatus) UnmarshalBinary(b []byte) error {
+	var res CircuitStatus
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuit_termination.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuit_termination.go
new file mode 100644
index 0000000..264aec0
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuit_termination.go
@@ -0,0 +1,302 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// CircuitTermination circuit termination
+// swagger:model CircuitTermination
+type CircuitTermination struct {
+
+	// circuit
+	// Required: true
+	Circuit *NestedCircuit `json:"circuit"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// interface
+	// Required: true
+	Interface *Interface `json:"interface"`
+
+	// Port speed (Kbps)
+	// Required: true
+	// Maximum: 2.147483647e+09
+	// Minimum: 0
+	PortSpeed *int64 `json:"port_speed"`
+
+	// Patch panel/port(s)
+	// Max Length: 100
+	PpInfo string `json:"pp_info,omitempty"`
+
+	// site
+	// Required: true
+	Site *NestedSite `json:"site"`
+
+	// Termination
+	// Required: true
+	TermSide *string `json:"term_side"`
+
+	// Upstream speed (Kbps)
+	//
+	// Upstream speed, if different from port speed
+	// Maximum: 2.147483647e+09
+	// Minimum: 0
+	UpstreamSpeed *int64 `json:"upstream_speed,omitempty"`
+
+	// Cross-connect ID
+	// Max Length: 50
+	XconnectID string `json:"xconnect_id,omitempty"`
+}
+
+// Validate validates this circuit termination
+func (m *CircuitTermination) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCircuit(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateInterface(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePortSpeed(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePpInfo(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSite(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateTermSide(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateUpstreamSpeed(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateXconnectID(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *CircuitTermination) validateCircuit(formats strfmt.Registry) error {
+
+	if err := validate.Required("circuit", "body", m.Circuit); err != nil {
+		return err
+	}
+
+	if m.Circuit != nil {
+
+		if err := m.Circuit.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("circuit")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *CircuitTermination) validateInterface(formats strfmt.Registry) error {
+
+	if err := validate.Required("interface", "body", m.Interface); err != nil {
+		return err
+	}
+
+	if m.Interface != nil {
+
+		if err := m.Interface.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("interface")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *CircuitTermination) validatePortSpeed(formats strfmt.Registry) error {
+
+	if err := validate.Required("port_speed", "body", m.PortSpeed); err != nil {
+		return err
+	}
+
+	if err := validate.MinimumInt("port_speed", "body", int64(*m.PortSpeed), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("port_speed", "body", int64(*m.PortSpeed), 2.147483647e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *CircuitTermination) validatePpInfo(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.PpInfo) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("pp_info", "body", string(m.PpInfo), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *CircuitTermination) validateSite(formats strfmt.Registry) error {
+
+	if err := validate.Required("site", "body", m.Site); err != nil {
+		return err
+	}
+
+	if m.Site != nil {
+
+		if err := m.Site.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("site")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+var circuitTerminationTypeTermSidePropEnum []interface{}
+
+func init() {
+	var res []string
+	if err := json.Unmarshal([]byte(`["A","Z"]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		circuitTerminationTypeTermSidePropEnum = append(circuitTerminationTypeTermSidePropEnum, v)
+	}
+}
+
+const (
+	// CircuitTerminationTermSideA captures enum value "A"
+	CircuitTerminationTermSideA string = "A"
+	// CircuitTerminationTermSideZ captures enum value "Z"
+	CircuitTerminationTermSideZ string = "Z"
+)
+
+// prop value enum
+func (m *CircuitTermination) validateTermSideEnum(path, location string, value string) error {
+	if err := validate.Enum(path, location, value, circuitTerminationTypeTermSidePropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *CircuitTermination) validateTermSide(formats strfmt.Registry) error {
+
+	if err := validate.Required("term_side", "body", m.TermSide); err != nil {
+		return err
+	}
+
+	// value enum
+	if err := m.validateTermSideEnum("term_side", "body", *m.TermSide); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *CircuitTermination) validateUpstreamSpeed(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.UpstreamSpeed) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("upstream_speed", "body", int64(*m.UpstreamSpeed), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("upstream_speed", "body", int64(*m.UpstreamSpeed), 2.147483647e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *CircuitTermination) validateXconnectID(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.XconnectID) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("xconnect_id", "body", string(m.XconnectID), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *CircuitTermination) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *CircuitTermination) UnmarshalBinary(b []byte) error {
+	var res CircuitTermination
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuit_type.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuit_type.go
new file mode 100644
index 0000000..cb820ab
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuit_type.go
@@ -0,0 +1,116 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// CircuitType circuit type
+// swagger:model CircuitType
+type CircuitType struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this circuit type
+func (m *CircuitType) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *CircuitType) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *CircuitType) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *CircuitType) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *CircuitType) UnmarshalBinary(b []byte) error {
+	var res CircuitType
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuit_terminations_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuit_terminations_list_okbody.go
new file mode 100644
index 0000000..a10eb0c
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuit_terminations_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// CircuitsCircuitTerminationsListOKBody circuits circuit terminations list o k body
+// swagger:model circuitsCircuitTerminationsListOKBody
+type CircuitsCircuitTerminationsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results CircuitsCircuitTerminationsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this circuits circuit terminations list o k body
+func (m *CircuitsCircuitTerminationsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *CircuitsCircuitTerminationsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *CircuitsCircuitTerminationsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *CircuitsCircuitTerminationsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *CircuitsCircuitTerminationsListOKBody) UnmarshalBinary(b []byte) error {
+	var res CircuitsCircuitTerminationsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuit_terminations_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuit_terminations_list_okbody_results.go
new file mode 100644
index 0000000..0c876ba
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuit_terminations_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// CircuitsCircuitTerminationsListOKBodyResults circuits circuit terminations list o k body results
+// swagger:model circuitsCircuitTerminationsListOKBodyResults
+type CircuitsCircuitTerminationsListOKBodyResults []*CircuitTermination
+
+// Validate validates this circuits circuit terminations list o k body results
+func (m CircuitsCircuitTerminationsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuit_types_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuit_types_list_okbody.go
new file mode 100644
index 0000000..e0fd7d1
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuit_types_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// CircuitsCircuitTypesListOKBody circuits circuit types list o k body
+// swagger:model circuitsCircuitTypesListOKBody
+type CircuitsCircuitTypesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results CircuitsCircuitTypesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this circuits circuit types list o k body
+func (m *CircuitsCircuitTypesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *CircuitsCircuitTypesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *CircuitsCircuitTypesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *CircuitsCircuitTypesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *CircuitsCircuitTypesListOKBody) UnmarshalBinary(b []byte) error {
+	var res CircuitsCircuitTypesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuit_types_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuit_types_list_okbody_results.go
new file mode 100644
index 0000000..857830a
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuit_types_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// CircuitsCircuitTypesListOKBodyResults circuits circuit types list o k body results
+// swagger:model circuitsCircuitTypesListOKBodyResults
+type CircuitsCircuitTypesListOKBodyResults []*CircuitType
+
+// Validate validates this circuits circuit types list o k body results
+func (m CircuitsCircuitTypesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuits_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuits_list_okbody.go
new file mode 100644
index 0000000..7e3d10c
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuits_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// CircuitsCircuitsListOKBody circuits circuits list o k body
+// swagger:model circuitsCircuitsListOKBody
+type CircuitsCircuitsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results CircuitsCircuitsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this circuits circuits list o k body
+func (m *CircuitsCircuitsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *CircuitsCircuitsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *CircuitsCircuitsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *CircuitsCircuitsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *CircuitsCircuitsListOKBody) UnmarshalBinary(b []byte) error {
+	var res CircuitsCircuitsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuits_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuits_list_okbody_results.go
new file mode 100644
index 0000000..6033ace
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_circuits_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// CircuitsCircuitsListOKBodyResults circuits circuits list o k body results
+// swagger:model circuitsCircuitsListOKBodyResults
+type CircuitsCircuitsListOKBodyResults []*Circuit
+
+// Validate validates this circuits circuits list o k body results
+func (m CircuitsCircuitsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_providers_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_providers_list_okbody.go
new file mode 100644
index 0000000..d1fa3cc
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_providers_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// CircuitsProvidersListOKBody circuits providers list o k body
+// swagger:model circuitsProvidersListOKBody
+type CircuitsProvidersListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results CircuitsProvidersListOKBodyResults `json:"results"`
+}
+
+// Validate validates this circuits providers list o k body
+func (m *CircuitsProvidersListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *CircuitsProvidersListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *CircuitsProvidersListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *CircuitsProvidersListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *CircuitsProvidersListOKBody) UnmarshalBinary(b []byte) error {
+	var res CircuitsProvidersListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_providers_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_providers_list_okbody_results.go
new file mode 100644
index 0000000..22d02c9
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/circuits_providers_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// CircuitsProvidersListOKBodyResults circuits providers list o k body results
+// swagger:model circuitsProvidersListOKBodyResults
+type CircuitsProvidersListOKBodyResults []*Provider
+
+// Validate validates this circuits providers list o k body results
+func (m CircuitsProvidersListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/cluster.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/cluster.go
new file mode 100644
index 0000000..d3d4ad6
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/cluster.go
@@ -0,0 +1,186 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Cluster cluster
+// swagger:model Cluster
+type Cluster struct {
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// group
+	// Required: true
+	Group *NestedClusterGroup `json:"group"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 100
+	Name *string `json:"name"`
+
+	// site
+	// Required: true
+	Site *NestedSite `json:"site"`
+
+	// type
+	// Required: true
+	Type *NestedClusterType `json:"type"`
+}
+
+// Validate validates this cluster
+func (m *Cluster) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateGroup(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSite(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Cluster) validateGroup(formats strfmt.Registry) error {
+
+	if err := validate.Required("group", "body", m.Group); err != nil {
+		return err
+	}
+
+	if m.Group != nil {
+
+		if err := m.Group.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("group")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Cluster) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Cluster) validateSite(formats strfmt.Registry) error {
+
+	if err := validate.Required("site", "body", m.Site); err != nil {
+		return err
+	}
+
+	if m.Site != nil {
+
+		if err := m.Site.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("site")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Cluster) validateType(formats strfmt.Registry) error {
+
+	if err := validate.Required("type", "body", m.Type); err != nil {
+		return err
+	}
+
+	if m.Type != nil {
+
+		if err := m.Type.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("type")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Cluster) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Cluster) UnmarshalBinary(b []byte) error {
+	var res Cluster
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/cluster_group.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/cluster_group.go
new file mode 100644
index 0000000..917d539
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/cluster_group.go
@@ -0,0 +1,116 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// ClusterGroup cluster group
+// swagger:model ClusterGroup
+type ClusterGroup struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this cluster group
+func (m *ClusterGroup) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *ClusterGroup) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ClusterGroup) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *ClusterGroup) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *ClusterGroup) UnmarshalBinary(b []byte) error {
+	var res ClusterGroup
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/cluster_type.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/cluster_type.go
new file mode 100644
index 0000000..7cf330b
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/cluster_type.go
@@ -0,0 +1,116 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// ClusterType cluster type
+// swagger:model ClusterType
+type ClusterType struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this cluster type
+func (m *ClusterType) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *ClusterType) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ClusterType) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *ClusterType) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *ClusterType) UnmarshalBinary(b []byte) error {
+	var res ClusterType
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/console_port.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/console_port.go
new file mode 100644
index 0000000..0646b44
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/console_port.go
@@ -0,0 +1,188 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// ConsolePort console port
+// swagger:model ConsolePort
+type ConsolePort struct {
+
+	// Connection status
+	ConnectionStatus bool `json:"connection_status,omitempty"`
+
+	// cs port
+	// Required: true
+	CsPort *ConsoleServerPort `json:"cs_port"`
+
+	// device
+	// Required: true
+	Device *NestedDevice `json:"device"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this console port
+func (m *ConsolePort) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateConnectionStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateCsPort(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+var consolePortTypeConnectionStatusPropEnum []interface{}
+
+func init() {
+	var res []bool
+	if err := json.Unmarshal([]byte(`[false,true]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		consolePortTypeConnectionStatusPropEnum = append(consolePortTypeConnectionStatusPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *ConsolePort) validateConnectionStatusEnum(path, location string, value bool) error {
+	if err := validate.Enum(path, location, value, consolePortTypeConnectionStatusPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *ConsolePort) validateConnectionStatus(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.ConnectionStatus) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateConnectionStatusEnum("connection_status", "body", m.ConnectionStatus); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ConsolePort) validateCsPort(formats strfmt.Registry) error {
+
+	if err := validate.Required("cs_port", "body", m.CsPort); err != nil {
+		return err
+	}
+
+	if m.CsPort != nil {
+
+		if err := m.CsPort.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("cs_port")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *ConsolePort) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	if m.Device != nil {
+
+		if err := m.Device.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *ConsolePort) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *ConsolePort) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *ConsolePort) UnmarshalBinary(b []byte) error {
+	var res ConsolePort
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/console_port_template.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/console_port_template.go
new file mode 100644
index 0000000..3c623ac
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/console_port_template.go
@@ -0,0 +1,116 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// ConsolePortTemplate console port template
+// swagger:model ConsolePortTemplate
+type ConsolePortTemplate struct {
+
+	// device type
+	// Required: true
+	DeviceType *NestedDeviceType `json:"device_type"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this console port template
+func (m *ConsolePortTemplate) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDeviceType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *ConsolePortTemplate) validateDeviceType(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_type", "body", m.DeviceType); err != nil {
+		return err
+	}
+
+	if m.DeviceType != nil {
+
+		if err := m.DeviceType.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device_type")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *ConsolePortTemplate) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *ConsolePortTemplate) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *ConsolePortTemplate) UnmarshalBinary(b []byte) error {
+	var res ConsolePortTemplate
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/console_server_port.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/console_server_port.go
new file mode 100644
index 0000000..8ce6dc1
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/console_server_port.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// ConsoleServerPort Cs port
+// swagger:model ConsoleServerPort
+type ConsoleServerPort struct {
+
+	// Connected console
+	// Read Only: true
+	ConnectedConsole string `json:"connected_console,omitempty"`
+
+	// device
+	// Required: true
+	Device *NestedDevice `json:"device"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this console server port
+func (m *ConsoleServerPort) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *ConsoleServerPort) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	if m.Device != nil {
+
+		if err := m.Device.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *ConsoleServerPort) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *ConsoleServerPort) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *ConsoleServerPort) UnmarshalBinary(b []byte) error {
+	var res ConsoleServerPort
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/console_server_port_template.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/console_server_port_template.go
new file mode 100644
index 0000000..f10cb09
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/console_server_port_template.go
@@ -0,0 +1,116 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// ConsoleServerPortTemplate console server port template
+// swagger:model ConsoleServerPortTemplate
+type ConsoleServerPortTemplate struct {
+
+	// device type
+	// Required: true
+	DeviceType *NestedDeviceType `json:"device_type"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this console server port template
+func (m *ConsoleServerPortTemplate) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDeviceType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *ConsoleServerPortTemplate) validateDeviceType(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_type", "body", m.DeviceType); err != nil {
+		return err
+	}
+
+	if m.DeviceType != nil {
+
+		if err := m.DeviceType.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device_type")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *ConsoleServerPortTemplate) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *ConsoleServerPortTemplate) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *ConsoleServerPortTemplate) UnmarshalBinary(b []byte) error {
+	var res ConsoleServerPortTemplate
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_connections_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_connections_list_okbody.go
new file mode 100644
index 0000000..cf16ad8
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_connections_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimConsoleConnectionsListOKBody dcim console connections list o k body
+// swagger:model dcimConsoleConnectionsListOKBody
+type DcimConsoleConnectionsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimConsoleConnectionsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim console connections list o k body
+func (m *DcimConsoleConnectionsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimConsoleConnectionsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimConsoleConnectionsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimConsoleConnectionsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimConsoleConnectionsListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimConsoleConnectionsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_connections_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_connections_list_okbody_results.go
new file mode 100644
index 0000000..fb6e026
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_connections_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimConsoleConnectionsListOKBodyResults dcim console connections list o k body results
+// swagger:model dcimConsoleConnectionsListOKBodyResults
+type DcimConsoleConnectionsListOKBodyResults []*ConsolePort
+
+// Validate validates this dcim console connections list o k body results
+func (m DcimConsoleConnectionsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_port_templates_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_port_templates_list_okbody.go
new file mode 100644
index 0000000..4e01c12
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_port_templates_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimConsolePortTemplatesListOKBody dcim console port templates list o k body
+// swagger:model dcimConsolePortTemplatesListOKBody
+type DcimConsolePortTemplatesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimConsolePortTemplatesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim console port templates list o k body
+func (m *DcimConsolePortTemplatesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimConsolePortTemplatesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimConsolePortTemplatesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimConsolePortTemplatesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimConsolePortTemplatesListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimConsolePortTemplatesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_port_templates_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_port_templates_list_okbody_results.go
new file mode 100644
index 0000000..cdee33b
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_port_templates_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimConsolePortTemplatesListOKBodyResults dcim console port templates list o k body results
+// swagger:model dcimConsolePortTemplatesListOKBodyResults
+type DcimConsolePortTemplatesListOKBodyResults []*ConsolePortTemplate
+
+// Validate validates this dcim console port templates list o k body results
+func (m DcimConsolePortTemplatesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_ports_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_ports_list_okbody.go
new file mode 100644
index 0000000..1a9065d
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_ports_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimConsolePortsListOKBody dcim console ports list o k body
+// swagger:model dcimConsolePortsListOKBody
+type DcimConsolePortsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimConsolePortsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim console ports list o k body
+func (m *DcimConsolePortsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimConsolePortsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimConsolePortsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimConsolePortsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimConsolePortsListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimConsolePortsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_ports_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_ports_list_okbody_results.go
new file mode 100644
index 0000000..d7fcd4a
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_ports_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimConsolePortsListOKBodyResults dcim console ports list o k body results
+// swagger:model dcimConsolePortsListOKBodyResults
+type DcimConsolePortsListOKBodyResults []*ConsolePort
+
+// Validate validates this dcim console ports list o k body results
+func (m DcimConsolePortsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_server_port_templates_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_server_port_templates_list_okbody.go
new file mode 100644
index 0000000..1b0b571
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_server_port_templates_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimConsoleServerPortTemplatesListOKBody dcim console server port templates list o k body
+// swagger:model dcimConsoleServerPortTemplatesListOKBody
+type DcimConsoleServerPortTemplatesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimConsoleServerPortTemplatesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim console server port templates list o k body
+func (m *DcimConsoleServerPortTemplatesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimConsoleServerPortTemplatesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimConsoleServerPortTemplatesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimConsoleServerPortTemplatesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimConsoleServerPortTemplatesListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimConsoleServerPortTemplatesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_server_port_templates_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_server_port_templates_list_okbody_results.go
new file mode 100644
index 0000000..406849d
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_server_port_templates_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimConsoleServerPortTemplatesListOKBodyResults dcim console server port templates list o k body results
+// swagger:model dcimConsoleServerPortTemplatesListOKBodyResults
+type DcimConsoleServerPortTemplatesListOKBodyResults []*ConsoleServerPortTemplate
+
+// Validate validates this dcim console server port templates list o k body results
+func (m DcimConsoleServerPortTemplatesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_server_ports_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_server_ports_list_okbody.go
new file mode 100644
index 0000000..2071f35
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_server_ports_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimConsoleServerPortsListOKBody dcim console server ports list o k body
+// swagger:model dcimConsoleServerPortsListOKBody
+type DcimConsoleServerPortsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimConsoleServerPortsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim console server ports list o k body
+func (m *DcimConsoleServerPortsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimConsoleServerPortsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimConsoleServerPortsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimConsoleServerPortsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimConsoleServerPortsListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimConsoleServerPortsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_server_ports_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_server_ports_list_okbody_results.go
new file mode 100644
index 0000000..ab2dd1c
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_console_server_ports_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimConsoleServerPortsListOKBodyResults dcim console server ports list o k body results
+// swagger:model dcimConsoleServerPortsListOKBodyResults
+type DcimConsoleServerPortsListOKBodyResults []*ConsoleServerPort
+
+// Validate validates this dcim console server ports list o k body results
+func (m DcimConsoleServerPortsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_bay_templates_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_bay_templates_list_okbody.go
new file mode 100644
index 0000000..8a33f6c
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_bay_templates_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimDeviceBayTemplatesListOKBody dcim device bay templates list o k body
+// swagger:model dcimDeviceBayTemplatesListOKBody
+type DcimDeviceBayTemplatesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimDeviceBayTemplatesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim device bay templates list o k body
+func (m *DcimDeviceBayTemplatesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimDeviceBayTemplatesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimDeviceBayTemplatesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimDeviceBayTemplatesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimDeviceBayTemplatesListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimDeviceBayTemplatesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_bay_templates_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_bay_templates_list_okbody_results.go
new file mode 100644
index 0000000..ed0287b
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_bay_templates_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimDeviceBayTemplatesListOKBodyResults dcim device bay templates list o k body results
+// swagger:model dcimDeviceBayTemplatesListOKBodyResults
+type DcimDeviceBayTemplatesListOKBodyResults []*DeviceBayTemplate
+
+// Validate validates this dcim device bay templates list o k body results
+func (m DcimDeviceBayTemplatesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_bays_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_bays_list_okbody.go
new file mode 100644
index 0000000..8227102
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_bays_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimDeviceBaysListOKBody dcim device bays list o k body
+// swagger:model dcimDeviceBaysListOKBody
+type DcimDeviceBaysListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimDeviceBaysListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim device bays list o k body
+func (m *DcimDeviceBaysListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimDeviceBaysListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimDeviceBaysListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimDeviceBaysListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimDeviceBaysListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimDeviceBaysListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_bays_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_bays_list_okbody_results.go
new file mode 100644
index 0000000..15655a1
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_bays_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimDeviceBaysListOKBodyResults dcim device bays list o k body results
+// swagger:model dcimDeviceBaysListOKBodyResults
+type DcimDeviceBaysListOKBodyResults []*DeviceBay
+
+// Validate validates this dcim device bays list o k body results
+func (m DcimDeviceBaysListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_roles_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_roles_list_okbody.go
new file mode 100644
index 0000000..1ebd30d
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_roles_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimDeviceRolesListOKBody dcim device roles list o k body
+// swagger:model dcimDeviceRolesListOKBody
+type DcimDeviceRolesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimDeviceRolesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim device roles list o k body
+func (m *DcimDeviceRolesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimDeviceRolesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimDeviceRolesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimDeviceRolesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimDeviceRolesListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimDeviceRolesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_roles_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_roles_list_okbody_results.go
new file mode 100644
index 0000000..a5f50a5
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_roles_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimDeviceRolesListOKBodyResults dcim device roles list o k body results
+// swagger:model dcimDeviceRolesListOKBodyResults
+type DcimDeviceRolesListOKBodyResults []*DeviceRole
+
+// Validate validates this dcim device roles list o k body results
+func (m DcimDeviceRolesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_types_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_types_list_okbody.go
new file mode 100644
index 0000000..24e86cc
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_types_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimDeviceTypesListOKBody dcim device types list o k body
+// swagger:model dcimDeviceTypesListOKBody
+type DcimDeviceTypesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimDeviceTypesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim device types list o k body
+func (m *DcimDeviceTypesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimDeviceTypesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimDeviceTypesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimDeviceTypesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimDeviceTypesListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimDeviceTypesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_types_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_types_list_okbody_results.go
new file mode 100644
index 0000000..08343bd
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_device_types_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimDeviceTypesListOKBodyResults dcim device types list o k body results
+// swagger:model dcimDeviceTypesListOKBodyResults
+type DcimDeviceTypesListOKBodyResults []*DeviceType
+
+// Validate validates this dcim device types list o k body results
+func (m DcimDeviceTypesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_devices_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_devices_list_okbody.go
new file mode 100644
index 0000000..068262b
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_devices_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimDevicesListOKBody dcim devices list o k body
+// swagger:model dcimDevicesListOKBody
+type DcimDevicesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimDevicesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim devices list o k body
+func (m *DcimDevicesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimDevicesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimDevicesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimDevicesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimDevicesListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimDevicesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_devices_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_devices_list_okbody_results.go
new file mode 100644
index 0000000..eddebb2
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_devices_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimDevicesListOKBodyResults dcim devices list o k body results
+// swagger:model dcimDevicesListOKBodyResults
+type DcimDevicesListOKBodyResults []*Device
+
+// Validate validates this dcim devices list o k body results
+func (m DcimDevicesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interface_connections_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interface_connections_list_okbody.go
new file mode 100644
index 0000000..34437c3
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interface_connections_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimInterfaceConnectionsListOKBody dcim interface connections list o k body
+// swagger:model dcimInterfaceConnectionsListOKBody
+type DcimInterfaceConnectionsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimInterfaceConnectionsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim interface connections list o k body
+func (m *DcimInterfaceConnectionsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimInterfaceConnectionsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimInterfaceConnectionsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimInterfaceConnectionsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimInterfaceConnectionsListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimInterfaceConnectionsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interface_connections_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interface_connections_list_okbody_results.go
new file mode 100644
index 0000000..afba2ef
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interface_connections_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimInterfaceConnectionsListOKBodyResults dcim interface connections list o k body results
+// swagger:model dcimInterfaceConnectionsListOKBodyResults
+type DcimInterfaceConnectionsListOKBodyResults []*InterfaceConnection
+
+// Validate validates this dcim interface connections list o k body results
+func (m DcimInterfaceConnectionsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interface_templates_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interface_templates_list_okbody.go
new file mode 100644
index 0000000..32f05ee
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interface_templates_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimInterfaceTemplatesListOKBody dcim interface templates list o k body
+// swagger:model dcimInterfaceTemplatesListOKBody
+type DcimInterfaceTemplatesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimInterfaceTemplatesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim interface templates list o k body
+func (m *DcimInterfaceTemplatesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimInterfaceTemplatesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimInterfaceTemplatesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimInterfaceTemplatesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimInterfaceTemplatesListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimInterfaceTemplatesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interface_templates_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interface_templates_list_okbody_results.go
new file mode 100644
index 0000000..7964a72
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interface_templates_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimInterfaceTemplatesListOKBodyResults dcim interface templates list o k body results
+// swagger:model dcimInterfaceTemplatesListOKBodyResults
+type DcimInterfaceTemplatesListOKBodyResults []*InterfaceTemplate
+
+// Validate validates this dcim interface templates list o k body results
+func (m DcimInterfaceTemplatesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interfaces_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interfaces_list_okbody.go
new file mode 100644
index 0000000..fea5146
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interfaces_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimInterfacesListOKBody dcim interfaces list o k body
+// swagger:model dcimInterfacesListOKBody
+type DcimInterfacesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimInterfacesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim interfaces list o k body
+func (m *DcimInterfacesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimInterfacesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimInterfacesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimInterfacesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimInterfacesListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimInterfacesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interfaces_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interfaces_list_okbody_results.go
new file mode 100644
index 0000000..de0818f
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_interfaces_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimInterfacesListOKBodyResults dcim interfaces list o k body results
+// swagger:model dcimInterfacesListOKBodyResults
+type DcimInterfacesListOKBodyResults []*Interface
+
+// Validate validates this dcim interfaces list o k body results
+func (m DcimInterfacesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_inventory_items_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_inventory_items_list_okbody.go
new file mode 100644
index 0000000..fbb7037
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_inventory_items_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimInventoryItemsListOKBody dcim inventory items list o k body
+// swagger:model dcimInventoryItemsListOKBody
+type DcimInventoryItemsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimInventoryItemsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim inventory items list o k body
+func (m *DcimInventoryItemsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimInventoryItemsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimInventoryItemsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimInventoryItemsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimInventoryItemsListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimInventoryItemsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_inventory_items_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_inventory_items_list_okbody_results.go
new file mode 100644
index 0000000..606ff82
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_inventory_items_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimInventoryItemsListOKBodyResults dcim inventory items list o k body results
+// swagger:model dcimInventoryItemsListOKBodyResults
+type DcimInventoryItemsListOKBodyResults []*InventoryItem
+
+// Validate validates this dcim inventory items list o k body results
+func (m DcimInventoryItemsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_manufacturers_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_manufacturers_list_okbody.go
new file mode 100644
index 0000000..887f493
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_manufacturers_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimManufacturersListOKBody dcim manufacturers list o k body
+// swagger:model dcimManufacturersListOKBody
+type DcimManufacturersListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimManufacturersListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim manufacturers list o k body
+func (m *DcimManufacturersListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimManufacturersListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimManufacturersListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimManufacturersListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimManufacturersListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimManufacturersListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_manufacturers_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_manufacturers_list_okbody_results.go
new file mode 100644
index 0000000..e780b03
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_manufacturers_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimManufacturersListOKBodyResults dcim manufacturers list o k body results
+// swagger:model dcimManufacturersListOKBodyResults
+type DcimManufacturersListOKBodyResults []*Manufacturer
+
+// Validate validates this dcim manufacturers list o k body results
+func (m DcimManufacturersListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_platforms_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_platforms_list_okbody.go
new file mode 100644
index 0000000..b36ae49
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_platforms_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimPlatformsListOKBody dcim platforms list o k body
+// swagger:model dcimPlatformsListOKBody
+type DcimPlatformsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimPlatformsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim platforms list o k body
+func (m *DcimPlatformsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimPlatformsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimPlatformsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimPlatformsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimPlatformsListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimPlatformsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_platforms_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_platforms_list_okbody_results.go
new file mode 100644
index 0000000..4ae6d12
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_platforms_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimPlatformsListOKBodyResults dcim platforms list o k body results
+// swagger:model dcimPlatformsListOKBodyResults
+type DcimPlatformsListOKBodyResults []*Platform
+
+// Validate validates this dcim platforms list o k body results
+func (m DcimPlatformsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_connections_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_connections_list_okbody.go
new file mode 100644
index 0000000..b6b0dd6
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_connections_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimPowerConnectionsListOKBody dcim power connections list o k body
+// swagger:model dcimPowerConnectionsListOKBody
+type DcimPowerConnectionsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimPowerConnectionsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim power connections list o k body
+func (m *DcimPowerConnectionsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimPowerConnectionsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimPowerConnectionsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimPowerConnectionsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimPowerConnectionsListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimPowerConnectionsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_connections_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_connections_list_okbody_results.go
new file mode 100644
index 0000000..6fb485c
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_connections_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimPowerConnectionsListOKBodyResults dcim power connections list o k body results
+// swagger:model dcimPowerConnectionsListOKBodyResults
+type DcimPowerConnectionsListOKBodyResults []*PowerPort
+
+// Validate validates this dcim power connections list o k body results
+func (m DcimPowerConnectionsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_outlet_templates_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_outlet_templates_list_okbody.go
new file mode 100644
index 0000000..5401da8
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_outlet_templates_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimPowerOutletTemplatesListOKBody dcim power outlet templates list o k body
+// swagger:model dcimPowerOutletTemplatesListOKBody
+type DcimPowerOutletTemplatesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimPowerOutletTemplatesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim power outlet templates list o k body
+func (m *DcimPowerOutletTemplatesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimPowerOutletTemplatesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimPowerOutletTemplatesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimPowerOutletTemplatesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimPowerOutletTemplatesListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimPowerOutletTemplatesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_outlet_templates_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_outlet_templates_list_okbody_results.go
new file mode 100644
index 0000000..79074c1
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_outlet_templates_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimPowerOutletTemplatesListOKBodyResults dcim power outlet templates list o k body results
+// swagger:model dcimPowerOutletTemplatesListOKBodyResults
+type DcimPowerOutletTemplatesListOKBodyResults []*PowerOutletTemplate
+
+// Validate validates this dcim power outlet templates list o k body results
+func (m DcimPowerOutletTemplatesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_outlets_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_outlets_list_okbody.go
new file mode 100644
index 0000000..9cc35d1
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_outlets_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimPowerOutletsListOKBody dcim power outlets list o k body
+// swagger:model dcimPowerOutletsListOKBody
+type DcimPowerOutletsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimPowerOutletsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim power outlets list o k body
+func (m *DcimPowerOutletsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimPowerOutletsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimPowerOutletsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimPowerOutletsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimPowerOutletsListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimPowerOutletsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_outlets_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_outlets_list_okbody_results.go
new file mode 100644
index 0000000..5e7299e
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_outlets_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimPowerOutletsListOKBodyResults dcim power outlets list o k body results
+// swagger:model dcimPowerOutletsListOKBodyResults
+type DcimPowerOutletsListOKBodyResults []*PowerOutlet
+
+// Validate validates this dcim power outlets list o k body results
+func (m DcimPowerOutletsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_port_templates_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_port_templates_list_okbody.go
new file mode 100644
index 0000000..9681270
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_port_templates_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimPowerPortTemplatesListOKBody dcim power port templates list o k body
+// swagger:model dcimPowerPortTemplatesListOKBody
+type DcimPowerPortTemplatesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimPowerPortTemplatesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim power port templates list o k body
+func (m *DcimPowerPortTemplatesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimPowerPortTemplatesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimPowerPortTemplatesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimPowerPortTemplatesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimPowerPortTemplatesListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimPowerPortTemplatesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_port_templates_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_port_templates_list_okbody_results.go
new file mode 100644
index 0000000..9363353
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_port_templates_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimPowerPortTemplatesListOKBodyResults dcim power port templates list o k body results
+// swagger:model dcimPowerPortTemplatesListOKBodyResults
+type DcimPowerPortTemplatesListOKBodyResults []*PowerPortTemplate
+
+// Validate validates this dcim power port templates list o k body results
+func (m DcimPowerPortTemplatesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_ports_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_ports_list_okbody.go
new file mode 100644
index 0000000..e435e12
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_ports_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimPowerPortsListOKBody dcim power ports list o k body
+// swagger:model dcimPowerPortsListOKBody
+type DcimPowerPortsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimPowerPortsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim power ports list o k body
+func (m *DcimPowerPortsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimPowerPortsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimPowerPortsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimPowerPortsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimPowerPortsListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimPowerPortsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_ports_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_ports_list_okbody_results.go
new file mode 100644
index 0000000..1162134
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_power_ports_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimPowerPortsListOKBodyResults dcim power ports list o k body results
+// swagger:model dcimPowerPortsListOKBodyResults
+type DcimPowerPortsListOKBodyResults []*PowerPort
+
+// Validate validates this dcim power ports list o k body results
+func (m DcimPowerPortsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_groups_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_groups_list_okbody.go
new file mode 100644
index 0000000..9ef16d6
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_groups_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimRackGroupsListOKBody dcim rack groups list o k body
+// swagger:model dcimRackGroupsListOKBody
+type DcimRackGroupsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimRackGroupsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim rack groups list o k body
+func (m *DcimRackGroupsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimRackGroupsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimRackGroupsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimRackGroupsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimRackGroupsListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimRackGroupsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_groups_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_groups_list_okbody_results.go
new file mode 100644
index 0000000..50967e1
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_groups_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimRackGroupsListOKBodyResults dcim rack groups list o k body results
+// swagger:model dcimRackGroupsListOKBodyResults
+type DcimRackGroupsListOKBodyResults []*RackGroup
+
+// Validate validates this dcim rack groups list o k body results
+func (m DcimRackGroupsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_reservations_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_reservations_list_okbody.go
new file mode 100644
index 0000000..4b5d7d7
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_reservations_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimRackReservationsListOKBody dcim rack reservations list o k body
+// swagger:model dcimRackReservationsListOKBody
+type DcimRackReservationsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimRackReservationsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim rack reservations list o k body
+func (m *DcimRackReservationsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimRackReservationsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimRackReservationsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimRackReservationsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimRackReservationsListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimRackReservationsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_reservations_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_reservations_list_okbody_results.go
new file mode 100644
index 0000000..8e8a4d1
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_reservations_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimRackReservationsListOKBodyResults dcim rack reservations list o k body results
+// swagger:model dcimRackReservationsListOKBodyResults
+type DcimRackReservationsListOKBodyResults []*RackReservation
+
+// Validate validates this dcim rack reservations list o k body results
+func (m DcimRackReservationsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_roles_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_roles_list_okbody.go
new file mode 100644
index 0000000..c357233
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_roles_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimRackRolesListOKBody dcim rack roles list o k body
+// swagger:model dcimRackRolesListOKBody
+type DcimRackRolesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimRackRolesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim rack roles list o k body
+func (m *DcimRackRolesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimRackRolesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimRackRolesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimRackRolesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimRackRolesListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimRackRolesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_roles_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_roles_list_okbody_results.go
new file mode 100644
index 0000000..f594fe6
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_rack_roles_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimRackRolesListOKBodyResults dcim rack roles list o k body results
+// swagger:model dcimRackRolesListOKBodyResults
+type DcimRackRolesListOKBodyResults []*RackRole
+
+// Validate validates this dcim rack roles list o k body results
+func (m DcimRackRolesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_racks_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_racks_list_okbody.go
new file mode 100644
index 0000000..96cd252
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_racks_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimRacksListOKBody dcim racks list o k body
+// swagger:model dcimRacksListOKBody
+type DcimRacksListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimRacksListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim racks list o k body
+func (m *DcimRacksListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimRacksListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimRacksListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimRacksListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimRacksListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimRacksListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_racks_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_racks_list_okbody_results.go
new file mode 100644
index 0000000..cc7d7b8
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_racks_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimRacksListOKBodyResults dcim racks list o k body results
+// swagger:model dcimRacksListOKBodyResults
+type DcimRacksListOKBodyResults []*Rack
+
+// Validate validates this dcim racks list o k body results
+func (m DcimRacksListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_regions_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_regions_list_okbody.go
new file mode 100644
index 0000000..31ee20b
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_regions_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimRegionsListOKBody dcim regions list o k body
+// swagger:model dcimRegionsListOKBody
+type DcimRegionsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimRegionsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim regions list o k body
+func (m *DcimRegionsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimRegionsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimRegionsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimRegionsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimRegionsListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimRegionsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_regions_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_regions_list_okbody_results.go
new file mode 100644
index 0000000..1514014
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_regions_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimRegionsListOKBodyResults dcim regions list o k body results
+// swagger:model dcimRegionsListOKBodyResults
+type DcimRegionsListOKBodyResults []*Region
+
+// Validate validates this dcim regions list o k body results
+func (m DcimRegionsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_sites_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_sites_list_okbody.go
new file mode 100644
index 0000000..4747a37
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_sites_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimSitesListOKBody dcim sites list o k body
+// swagger:model dcimSitesListOKBody
+type DcimSitesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimSitesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim sites list o k body
+func (m *DcimSitesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimSitesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimSitesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimSitesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimSitesListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimSitesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_sites_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_sites_list_okbody_results.go
new file mode 100644
index 0000000..837a658
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_sites_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimSitesListOKBodyResults dcim sites list o k body results
+// swagger:model dcimSitesListOKBodyResults
+type DcimSitesListOKBodyResults []*Site
+
+// Validate validates this dcim sites list o k body results
+func (m DcimSitesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_virtual_chassis_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_virtual_chassis_list_okbody.go
new file mode 100644
index 0000000..15c3dcf
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_virtual_chassis_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DcimVirtualChassisListOKBody dcim virtual chassis list o k body
+// swagger:model dcimVirtualChassisListOKBody
+type DcimVirtualChassisListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results DcimVirtualChassisListOKBodyResults `json:"results"`
+}
+
+// Validate validates this dcim virtual chassis list o k body
+func (m *DcimVirtualChassisListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DcimVirtualChassisListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DcimVirtualChassisListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DcimVirtualChassisListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DcimVirtualChassisListOKBody) UnmarshalBinary(b []byte) error {
+	var res DcimVirtualChassisListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_virtual_chassis_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_virtual_chassis_list_okbody_results.go
new file mode 100644
index 0000000..c93a342
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/dcim_virtual_chassis_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// DcimVirtualChassisListOKBodyResults dcim virtual chassis list o k body results
+// swagger:model dcimVirtualChassisListOKBodyResults
+type DcimVirtualChassisListOKBodyResults []*VirtualChassis
+
+// Validate validates this dcim virtual chassis list o k body results
+func (m DcimVirtualChassisListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device.go
new file mode 100644
index 0000000..5b4486a
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device.go
@@ -0,0 +1,604 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Device device
+// swagger:model Device
+type Device struct {
+
+	// Asset tag
+	//
+	// A unique tag used to identify this device
+	// Max Length: 50
+	AssetTag string `json:"asset_tag,omitempty"`
+
+	// cluster
+	// Required: true
+	Cluster *NestedCluster `json:"cluster"`
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// device role
+	// Required: true
+	DeviceRole *NestedDeviceRole `json:"device_role"`
+
+	// device type
+	// Required: true
+	DeviceType *NestedDeviceType `json:"device_type"`
+
+	// Display name
+	// Read Only: true
+	DisplayName string `json:"display_name,omitempty"`
+
+	// face
+	// Required: true
+	Face *DeviceFace `json:"face"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Max Length: 64
+	Name string `json:"name,omitempty"`
+
+	// Parent device
+	// Read Only: true
+	ParentDevice string `json:"parent_device,omitempty"`
+
+	// platform
+	// Required: true
+	Platform *NestedPlatform `json:"platform"`
+
+	// Position (U)
+	//
+	// The lowest-numbered unit occupied by the device
+	// Required: true
+	// Maximum: 32767
+	// Minimum: 1
+	Position *int64 `json:"position"`
+
+	// primary ip
+	// Required: true
+	PrimaryIP *DeviceIPAddress `json:"primary_ip"`
+
+	// primary ip4
+	// Required: true
+	PrimaryIp4 *DeviceIPAddress `json:"primary_ip4"`
+
+	// primary ip6
+	// Required: true
+	PrimaryIp6 *DeviceIPAddress `json:"primary_ip6"`
+
+	// rack
+	// Required: true
+	Rack *NestedRack `json:"rack"`
+
+	// Serial number
+	// Max Length: 50
+	Serial string `json:"serial,omitempty"`
+
+	// site
+	// Required: true
+	Site *NestedSite `json:"site"`
+
+	// status
+	// Required: true
+	Status *DeviceStatus `json:"status"`
+
+	// tenant
+	// Required: true
+	Tenant *NestedTenant `json:"tenant"`
+
+	// Vc position
+	// Required: true
+	// Maximum: 255
+	// Minimum: 0
+	VcPosition *int64 `json:"vc_position"`
+
+	// Vc priority
+	// Maximum: 255
+	// Minimum: 0
+	VcPriority *int64 `json:"vc_priority,omitempty"`
+
+	// virtual chassis
+	// Required: true
+	VirtualChassis *DeviceVirtualChassis `json:"virtual_chassis"`
+}
+
+// Validate validates this device
+func (m *Device) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateAssetTag(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateCluster(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDeviceRole(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDeviceType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateFace(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePlatform(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePosition(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePrimaryIP(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePrimaryIp4(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePrimaryIp6(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRack(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSerial(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSite(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateTenant(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateVcPosition(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateVcPriority(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateVirtualChassis(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Device) validateAssetTag(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.AssetTag) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("asset_tag", "body", string(m.AssetTag), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Device) validateCluster(formats strfmt.Registry) error {
+
+	if err := validate.Required("cluster", "body", m.Cluster); err != nil {
+		return err
+	}
+
+	if m.Cluster != nil {
+
+		if err := m.Cluster.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("cluster")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Device) validateDeviceRole(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_role", "body", m.DeviceRole); err != nil {
+		return err
+	}
+
+	if m.DeviceRole != nil {
+
+		if err := m.DeviceRole.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device_role")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Device) validateDeviceType(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_type", "body", m.DeviceType); err != nil {
+		return err
+	}
+
+	if m.DeviceType != nil {
+
+		if err := m.DeviceType.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device_type")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Device) validateFace(formats strfmt.Registry) error {
+
+	if err := validate.Required("face", "body", m.Face); err != nil {
+		return err
+	}
+
+	if m.Face != nil {
+
+		if err := m.Face.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("face")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Device) validateName(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Name) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("name", "body", string(m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Device) validatePlatform(formats strfmt.Registry) error {
+
+	if err := validate.Required("platform", "body", m.Platform); err != nil {
+		return err
+	}
+
+	if m.Platform != nil {
+
+		if err := m.Platform.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("platform")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Device) validatePosition(formats strfmt.Registry) error {
+
+	if err := validate.Required("position", "body", m.Position); err != nil {
+		return err
+	}
+
+	if err := validate.MinimumInt("position", "body", int64(*m.Position), 1, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("position", "body", int64(*m.Position), 32767, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Device) validatePrimaryIP(formats strfmt.Registry) error {
+
+	if err := validate.Required("primary_ip", "body", m.PrimaryIP); err != nil {
+		return err
+	}
+
+	if m.PrimaryIP != nil {
+
+		if err := m.PrimaryIP.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("primary_ip")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Device) validatePrimaryIp4(formats strfmt.Registry) error {
+
+	if err := validate.Required("primary_ip4", "body", m.PrimaryIp4); err != nil {
+		return err
+	}
+
+	if m.PrimaryIp4 != nil {
+
+		if err := m.PrimaryIp4.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("primary_ip4")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Device) validatePrimaryIp6(formats strfmt.Registry) error {
+
+	if err := validate.Required("primary_ip6", "body", m.PrimaryIp6); err != nil {
+		return err
+	}
+
+	if m.PrimaryIp6 != nil {
+
+		if err := m.PrimaryIp6.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("primary_ip6")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Device) validateRack(formats strfmt.Registry) error {
+
+	if err := validate.Required("rack", "body", m.Rack); err != nil {
+		return err
+	}
+
+	if m.Rack != nil {
+
+		if err := m.Rack.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("rack")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Device) validateSerial(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Serial) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("serial", "body", string(m.Serial), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Device) validateSite(formats strfmt.Registry) error {
+
+	if err := validate.Required("site", "body", m.Site); err != nil {
+		return err
+	}
+
+	if m.Site != nil {
+
+		if err := m.Site.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("site")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Device) validateStatus(formats strfmt.Registry) error {
+
+	if err := validate.Required("status", "body", m.Status); err != nil {
+		return err
+	}
+
+	if m.Status != nil {
+
+		if err := m.Status.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("status")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Device) validateTenant(formats strfmt.Registry) error {
+
+	if err := validate.Required("tenant", "body", m.Tenant); err != nil {
+		return err
+	}
+
+	if m.Tenant != nil {
+
+		if err := m.Tenant.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("tenant")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Device) validateVcPosition(formats strfmt.Registry) error {
+
+	if err := validate.Required("vc_position", "body", m.VcPosition); err != nil {
+		return err
+	}
+
+	if err := validate.MinimumInt("vc_position", "body", int64(*m.VcPosition), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("vc_position", "body", int64(*m.VcPosition), 255, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Device) validateVcPriority(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.VcPriority) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("vc_priority", "body", int64(*m.VcPriority), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("vc_priority", "body", int64(*m.VcPriority), 255, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Device) validateVirtualChassis(formats strfmt.Registry) error {
+
+	if err := validate.Required("virtual_chassis", "body", m.VirtualChassis); err != nil {
+		return err
+	}
+
+	if m.VirtualChassis != nil {
+
+		if err := m.VirtualChassis.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("virtual_chassis")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Device) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Device) UnmarshalBinary(b []byte) error {
+	var res Device
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_bay.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_bay.go
new file mode 100644
index 0000000..9843586
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_bay.go
@@ -0,0 +1,144 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DeviceBay device bay
+// swagger:model DeviceBay
+type DeviceBay struct {
+
+	// device
+	// Required: true
+	Device *NestedDevice `json:"device"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// installed device
+	// Required: true
+	InstalledDevice *NestedDevice `json:"installed_device"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this device bay
+func (m *DeviceBay) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateInstalledDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DeviceBay) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	if m.Device != nil {
+
+		if err := m.Device.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *DeviceBay) validateInstalledDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("installed_device", "body", m.InstalledDevice); err != nil {
+		return err
+	}
+
+	if m.InstalledDevice != nil {
+
+		if err := m.InstalledDevice.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("installed_device")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *DeviceBay) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DeviceBay) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DeviceBay) UnmarshalBinary(b []byte) error {
+	var res DeviceBay
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_bay_template.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_bay_template.go
new file mode 100644
index 0000000..a88e332
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_bay_template.go
@@ -0,0 +1,116 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DeviceBayTemplate device bay template
+// swagger:model DeviceBayTemplate
+type DeviceBayTemplate struct {
+
+	// device type
+	// Required: true
+	DeviceType *NestedDeviceType `json:"device_type"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this device bay template
+func (m *DeviceBayTemplate) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDeviceType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DeviceBayTemplate) validateDeviceType(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_type", "body", m.DeviceType); err != nil {
+		return err
+	}
+
+	if m.DeviceType != nil {
+
+		if err := m.DeviceType.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device_type")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *DeviceBayTemplate) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DeviceBayTemplate) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DeviceBayTemplate) UnmarshalBinary(b []byte) error {
+	var res DeviceBayTemplate
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_face.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_face.go
new file mode 100644
index 0000000..5b87c77
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_face.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DeviceFace Face
+// swagger:model deviceFace
+type DeviceFace struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this device face
+func (m *DeviceFace) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DeviceFace) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DeviceFace) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DeviceFace) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DeviceFace) UnmarshalBinary(b []byte) error {
+	var res DeviceFace
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_ip_address.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_ip_address.go
new file mode 100644
index 0000000..6d265fd
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_ip_address.go
@@ -0,0 +1,93 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DeviceIPAddress Primary ip
+// swagger:model DeviceIPAddress
+type DeviceIPAddress struct {
+
+	// Address
+	//
+	// IPv4 or IPv6 address (with mask)
+	// Required: true
+	Address *string `json:"address"`
+
+	// Family
+	// Read Only: true
+	Family int64 `json:"family,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this device IP address
+func (m *DeviceIPAddress) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateAddress(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DeviceIPAddress) validateAddress(formats strfmt.Registry) error {
+
+	if err := validate.Required("address", "body", m.Address); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DeviceIPAddress) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DeviceIPAddress) UnmarshalBinary(b []byte) error {
+	var res DeviceIPAddress
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_role.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_role.go
new file mode 100644
index 0000000..4413d05
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_role.go
@@ -0,0 +1,149 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DeviceRole device role
+// swagger:model DeviceRole
+type DeviceRole struct {
+
+	// Color
+	// Required: true
+	// Max Length: 6
+	// Pattern: ^[0-9a-f]{6}$
+	Color *string `json:"color"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// VM Role
+	//
+	// Virtual machines may be assigned to this role
+	VMRole bool `json:"vm_role,omitempty"`
+}
+
+// Validate validates this device role
+func (m *DeviceRole) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateColor(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DeviceRole) validateColor(formats strfmt.Registry) error {
+
+	if err := validate.Required("color", "body", m.Color); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("color", "body", string(*m.Color), 6); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("color", "body", string(*m.Color), `^[0-9a-f]{6}$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DeviceRole) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DeviceRole) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DeviceRole) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DeviceRole) UnmarshalBinary(b []byte) error {
+	var res DeviceRole
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_status.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_status.go
new file mode 100644
index 0000000..cf2f5aa
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_status.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DeviceStatus Status
+// swagger:model deviceStatus
+type DeviceStatus struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this device status
+func (m *DeviceStatus) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DeviceStatus) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DeviceStatus) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DeviceStatus) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DeviceStatus) UnmarshalBinary(b []byte) error {
+	var res DeviceStatus
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_type.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_type.go
new file mode 100644
index 0000000..e6c167a
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_type.go
@@ -0,0 +1,281 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DeviceType device type
+// swagger:model DeviceType
+type DeviceType struct {
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Instance count
+	// Read Only: true
+	InstanceCount int64 `json:"instance_count,omitempty"`
+
+	// interface ordering
+	// Required: true
+	InterfaceOrdering *DeviceTypeInterfaceOrdering `json:"interface_ordering"`
+
+	// Is a console server
+	//
+	// This type of device has console server ports
+	IsConsoleServer bool `json:"is_console_server,omitempty"`
+
+	// Is full depth
+	//
+	// Device consumes both front and rear rack faces
+	IsFullDepth bool `json:"is_full_depth,omitempty"`
+
+	// Is a network device
+	//
+	// This type of device has network interfaces
+	IsNetworkDevice bool `json:"is_network_device,omitempty"`
+
+	// Is a PDU
+	//
+	// This type of device has power outlets
+	IsPdu bool `json:"is_pdu,omitempty"`
+
+	// manufacturer
+	// Required: true
+	Manufacturer *NestedManufacturer `json:"manufacturer"`
+
+	// Model
+	// Required: true
+	// Max Length: 50
+	Model *string `json:"model"`
+
+	// Part number
+	//
+	// Discrete part number (optional)
+	// Max Length: 50
+	PartNumber string `json:"part_number,omitempty"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// subdevice role
+	// Required: true
+	SubdeviceRole *DeviceTypeSubdeviceRole `json:"subdevice_role"`
+
+	// Height (U)
+	// Maximum: 32767
+	// Minimum: 0
+	UHeight *int64 `json:"u_height,omitempty"`
+}
+
+// Validate validates this device type
+func (m *DeviceType) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateInterfaceOrdering(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateManufacturer(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateModel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePartNumber(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSubdeviceRole(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateUHeight(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DeviceType) validateInterfaceOrdering(formats strfmt.Registry) error {
+
+	if err := validate.Required("interface_ordering", "body", m.InterfaceOrdering); err != nil {
+		return err
+	}
+
+	if m.InterfaceOrdering != nil {
+
+		if err := m.InterfaceOrdering.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("interface_ordering")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *DeviceType) validateManufacturer(formats strfmt.Registry) error {
+
+	if err := validate.Required("manufacturer", "body", m.Manufacturer); err != nil {
+		return err
+	}
+
+	if m.Manufacturer != nil {
+
+		if err := m.Manufacturer.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("manufacturer")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *DeviceType) validateModel(formats strfmt.Registry) error {
+
+	if err := validate.Required("model", "body", m.Model); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("model", "body", string(*m.Model), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DeviceType) validatePartNumber(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.PartNumber) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("part_number", "body", string(m.PartNumber), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DeviceType) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DeviceType) validateSubdeviceRole(formats strfmt.Registry) error {
+
+	if err := validate.Required("subdevice_role", "body", m.SubdeviceRole); err != nil {
+		return err
+	}
+
+	if m.SubdeviceRole != nil {
+
+		if err := m.SubdeviceRole.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("subdevice_role")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *DeviceType) validateUHeight(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.UHeight) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("u_height", "body", int64(*m.UHeight), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("u_height", "body", int64(*m.UHeight), 32767, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DeviceType) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DeviceType) UnmarshalBinary(b []byte) error {
+	var res DeviceType
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_type_interface_ordering.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_type_interface_ordering.go
new file mode 100644
index 0000000..cc49a40
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_type_interface_ordering.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DeviceTypeInterfaceOrdering Interface ordering
+// swagger:model deviceTypeInterfaceOrdering
+type DeviceTypeInterfaceOrdering struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this device type interface ordering
+func (m *DeviceTypeInterfaceOrdering) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DeviceTypeInterfaceOrdering) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DeviceTypeInterfaceOrdering) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DeviceTypeInterfaceOrdering) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DeviceTypeInterfaceOrdering) UnmarshalBinary(b []byte) error {
+	var res DeviceTypeInterfaceOrdering
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_type_subdevice_role.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_type_subdevice_role.go
new file mode 100644
index 0000000..10566f9
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_type_subdevice_role.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DeviceTypeSubdeviceRole Subdevice role
+// swagger:model deviceTypeSubdeviceRole
+type DeviceTypeSubdeviceRole struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *bool `json:"value"`
+}
+
+// Validate validates this device type subdevice role
+func (m *DeviceTypeSubdeviceRole) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DeviceTypeSubdeviceRole) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *DeviceTypeSubdeviceRole) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DeviceTypeSubdeviceRole) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DeviceTypeSubdeviceRole) UnmarshalBinary(b []byte) error {
+	var res DeviceTypeSubdeviceRole
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_virtual_chassis.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_virtual_chassis.go
new file mode 100644
index 0000000..16b2841
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/device_virtual_chassis.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// DeviceVirtualChassis Virtual chassis
+// swagger:model DeviceVirtualChassis
+type DeviceVirtualChassis struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// master
+	// Required: true
+	Master *NestedDevice `json:"master"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this device virtual chassis
+func (m *DeviceVirtualChassis) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateMaster(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *DeviceVirtualChassis) validateMaster(formats strfmt.Registry) error {
+
+	if err := validate.Required("master", "body", m.Master); err != nil {
+		return err
+	}
+
+	if m.Master != nil {
+
+		if err := m.Master.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("master")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *DeviceVirtualChassis) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *DeviceVirtualChassis) UnmarshalBinary(b []byte) error {
+	var res DeviceVirtualChassis
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/export_template.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/export_template.go
new file mode 100644
index 0000000..740c074
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/export_template.go
@@ -0,0 +1,190 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// ExportTemplate export template
+// swagger:model ExportTemplate
+type ExportTemplate struct {
+
+	// Content type
+	// Required: true
+	ContentType *int64 `json:"content_type"`
+
+	// Description
+	// Max Length: 200
+	Description string `json:"description,omitempty"`
+
+	// File extension
+	// Max Length: 15
+	FileExtension string `json:"file_extension,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Mime type
+	// Max Length: 15
+	MimeType string `json:"mime_type,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 100
+	Name *string `json:"name"`
+
+	// Template code
+	// Required: true
+	TemplateCode *string `json:"template_code"`
+}
+
+// Validate validates this export template
+func (m *ExportTemplate) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateContentType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateFileExtension(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateMimeType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateTemplateCode(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *ExportTemplate) validateContentType(formats strfmt.Registry) error {
+
+	if err := validate.Required("content_type", "body", m.ContentType); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ExportTemplate) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 200); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ExportTemplate) validateFileExtension(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.FileExtension) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("file_extension", "body", string(m.FileExtension), 15); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ExportTemplate) validateMimeType(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.MimeType) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("mime_type", "body", string(m.MimeType), 15); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ExportTemplate) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ExportTemplate) validateTemplateCode(formats strfmt.Registry) error {
+
+	if err := validate.Required("template_code", "body", m.TemplateCode); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *ExportTemplate) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *ExportTemplate) UnmarshalBinary(b []byte) error {
+	var res ExportTemplate
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_export_templates_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_export_templates_list_okbody.go
new file mode 100644
index 0000000..f5ba7a1
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_export_templates_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// ExtrasExportTemplatesListOKBody extras export templates list o k body
+// swagger:model extrasExportTemplatesListOKBody
+type ExtrasExportTemplatesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results ExtrasExportTemplatesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this extras export templates list o k body
+func (m *ExtrasExportTemplatesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *ExtrasExportTemplatesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ExtrasExportTemplatesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *ExtrasExportTemplatesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *ExtrasExportTemplatesListOKBody) UnmarshalBinary(b []byte) error {
+	var res ExtrasExportTemplatesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_export_templates_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_export_templates_list_okbody_results.go
new file mode 100644
index 0000000..db9fad6
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_export_templates_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// ExtrasExportTemplatesListOKBodyResults extras export templates list o k body results
+// swagger:model extrasExportTemplatesListOKBodyResults
+type ExtrasExportTemplatesListOKBodyResults []*ExportTemplate
+
+// Validate validates this extras export templates list o k body results
+func (m ExtrasExportTemplatesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_graphs_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_graphs_list_okbody.go
new file mode 100644
index 0000000..7bca5ea
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_graphs_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// ExtrasGraphsListOKBody extras graphs list o k body
+// swagger:model extrasGraphsListOKBody
+type ExtrasGraphsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results ExtrasGraphsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this extras graphs list o k body
+func (m *ExtrasGraphsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *ExtrasGraphsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ExtrasGraphsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *ExtrasGraphsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *ExtrasGraphsListOKBody) UnmarshalBinary(b []byte) error {
+	var res ExtrasGraphsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_graphs_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_graphs_list_okbody_results.go
new file mode 100644
index 0000000..909d4a0
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_graphs_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// ExtrasGraphsListOKBodyResults extras graphs list o k body results
+// swagger:model extrasGraphsListOKBodyResults
+type ExtrasGraphsListOKBodyResults []*Graph
+
+// Validate validates this extras graphs list o k body results
+func (m ExtrasGraphsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_image_attachments_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_image_attachments_list_okbody.go
new file mode 100644
index 0000000..6e0c278
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_image_attachments_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// ExtrasImageAttachmentsListOKBody extras image attachments list o k body
+// swagger:model extrasImageAttachmentsListOKBody
+type ExtrasImageAttachmentsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results ExtrasImageAttachmentsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this extras image attachments list o k body
+func (m *ExtrasImageAttachmentsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *ExtrasImageAttachmentsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ExtrasImageAttachmentsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *ExtrasImageAttachmentsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *ExtrasImageAttachmentsListOKBody) UnmarshalBinary(b []byte) error {
+	var res ExtrasImageAttachmentsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_image_attachments_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_image_attachments_list_okbody_results.go
new file mode 100644
index 0000000..b40eb83
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_image_attachments_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// ExtrasImageAttachmentsListOKBodyResults extras image attachments list o k body results
+// swagger:model extrasImageAttachmentsListOKBodyResults
+type ExtrasImageAttachmentsListOKBodyResults []*ImageAttachment
+
+// Validate validates this extras image attachments list o k body results
+func (m ExtrasImageAttachmentsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_recent_activity_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_recent_activity_list_okbody.go
new file mode 100644
index 0000000..96eeabb
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_recent_activity_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// ExtrasRecentActivityListOKBody extras recent activity list o k body
+// swagger:model extrasRecentActivityListOKBody
+type ExtrasRecentActivityListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results ExtrasRecentActivityListOKBodyResults `json:"results"`
+}
+
+// Validate validates this extras recent activity list o k body
+func (m *ExtrasRecentActivityListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *ExtrasRecentActivityListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ExtrasRecentActivityListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *ExtrasRecentActivityListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *ExtrasRecentActivityListOKBody) UnmarshalBinary(b []byte) error {
+	var res ExtrasRecentActivityListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_recent_activity_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_recent_activity_list_okbody_results.go
new file mode 100644
index 0000000..2b6623f
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_recent_activity_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// ExtrasRecentActivityListOKBodyResults extras recent activity list o k body results
+// swagger:model extrasRecentActivityListOKBodyResults
+type ExtrasRecentActivityListOKBodyResults []*UserAction
+
+// Validate validates this extras recent activity list o k body results
+func (m ExtrasRecentActivityListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_topology_maps_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_topology_maps_list_okbody.go
new file mode 100644
index 0000000..005d8d8
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_topology_maps_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// ExtrasTopologyMapsListOKBody extras topology maps list o k body
+// swagger:model extrasTopologyMapsListOKBody
+type ExtrasTopologyMapsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results ExtrasTopologyMapsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this extras topology maps list o k body
+func (m *ExtrasTopologyMapsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *ExtrasTopologyMapsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ExtrasTopologyMapsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *ExtrasTopologyMapsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *ExtrasTopologyMapsListOKBody) UnmarshalBinary(b []byte) error {
+	var res ExtrasTopologyMapsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_topology_maps_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_topology_maps_list_okbody_results.go
new file mode 100644
index 0000000..731cc66
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/extras_topology_maps_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// ExtrasTopologyMapsListOKBodyResults extras topology maps list o k body results
+// swagger:model extrasTopologyMapsListOKBodyResults
+type ExtrasTopologyMapsListOKBodyResults []*TopologyMap
+
+// Validate validates this extras topology maps list o k body results
+func (m ExtrasTopologyMapsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/graph.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/graph.go
new file mode 100644
index 0000000..43ca2da
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/graph.go
@@ -0,0 +1,192 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Graph graph
+// swagger:model Graph
+type Graph struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Link URL
+	// Max Length: 200
+	Link strfmt.URI `json:"link,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 100
+	Name *string `json:"name"`
+
+	// Source URL
+	// Required: true
+	// Max Length: 500
+	Source *string `json:"source"`
+
+	// type
+	// Required: true
+	Type *GraphType `json:"type"`
+
+	// Weight
+	// Maximum: 32767
+	// Minimum: 0
+	Weight *int64 `json:"weight,omitempty"`
+}
+
+// Validate validates this graph
+func (m *Graph) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLink(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSource(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateWeight(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Graph) validateLink(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Link) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("link", "body", string(m.Link), 200); err != nil {
+		return err
+	}
+
+	if err := validate.FormatOf("link", "body", "uri", m.Link.String(), formats); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Graph) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Graph) validateSource(formats strfmt.Registry) error {
+
+	if err := validate.Required("source", "body", m.Source); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("source", "body", string(*m.Source), 500); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Graph) validateType(formats strfmt.Registry) error {
+
+	if err := validate.Required("type", "body", m.Type); err != nil {
+		return err
+	}
+
+	if m.Type != nil {
+
+		if err := m.Type.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("type")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Graph) validateWeight(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Weight) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("weight", "body", int64(*m.Weight), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("weight", "body", int64(*m.Weight), 32767, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Graph) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Graph) UnmarshalBinary(b []byte) error {
+	var res Graph
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/graph_type.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/graph_type.go
new file mode 100644
index 0000000..62187fc
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/graph_type.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// GraphType Type
+// swagger:model graphType
+type GraphType struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this graph type
+func (m *GraphType) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *GraphType) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *GraphType) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *GraphType) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *GraphType) UnmarshalBinary(b []byte) error {
+	var res GraphType
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/image_attachment.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/image_attachment.go
new file mode 100644
index 0000000..0149233
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/image_attachment.go
@@ -0,0 +1,174 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// ImageAttachment image attachment
+// swagger:model ImageAttachment
+type ImageAttachment struct {
+
+	// Created
+	// Read Only: true
+	Created strfmt.DateTime `json:"created,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Image
+	// Required: true
+	// Read Only: true
+	Image strfmt.URI `json:"image"`
+
+	// Image height
+	// Required: true
+	// Maximum: 32767
+	// Minimum: 0
+	ImageHeight *int64 `json:"image_height"`
+
+	// Image width
+	// Required: true
+	// Maximum: 32767
+	// Minimum: 0
+	ImageWidth *int64 `json:"image_width"`
+
+	// Name
+	// Max Length: 50
+	Name string `json:"name,omitempty"`
+
+	// Parent
+	// Read Only: true
+	Parent string `json:"parent,omitempty"`
+}
+
+// Validate validates this image attachment
+func (m *ImageAttachment) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateImage(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateImageHeight(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateImageWidth(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *ImageAttachment) validateImage(formats strfmt.Registry) error {
+
+	if err := validate.Required("image", "body", strfmt.URI(m.Image)); err != nil {
+		return err
+	}
+
+	if err := validate.FormatOf("image", "body", "uri", m.Image.String(), formats); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ImageAttachment) validateImageHeight(formats strfmt.Registry) error {
+
+	if err := validate.Required("image_height", "body", m.ImageHeight); err != nil {
+		return err
+	}
+
+	if err := validate.MinimumInt("image_height", "body", int64(*m.ImageHeight), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("image_height", "body", int64(*m.ImageHeight), 32767, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ImageAttachment) validateImageWidth(formats strfmt.Registry) error {
+
+	if err := validate.Required("image_width", "body", m.ImageWidth); err != nil {
+		return err
+	}
+
+	if err := validate.MinimumInt("image_width", "body", int64(*m.ImageWidth), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("image_width", "body", int64(*m.ImageWidth), 32767, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ImageAttachment) validateName(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Name) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("name", "body", string(m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *ImageAttachment) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *ImageAttachment) UnmarshalBinary(b []byte) error {
+	var res ImageAttachment
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface.go
new file mode 100644
index 0000000..e36fbb4
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface.go
@@ -0,0 +1,349 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Interface Interface
+// swagger:model Interface
+type Interface struct {
+
+	// circuit termination
+	// Required: true
+	CircuitTermination *InterfaceCircuitTermination `json:"circuit_termination"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// device
+	// Required: true
+	Device *NestedDevice `json:"device"`
+
+	// Enabled
+	Enabled bool `json:"enabled,omitempty"`
+
+	// form factor
+	// Required: true
+	FormFactor *InterfaceFormFactor `json:"form_factor"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Interface connection
+	// Read Only: true
+	InterfaceConnection string `json:"interface_connection,omitempty"`
+
+	// Is connected
+	// Read Only: true
+	IsConnected string `json:"is_connected,omitempty"`
+
+	// lag
+	// Required: true
+	Lag *NestedInterface `json:"lag"`
+
+	// MAC Address
+	MacAddress string `json:"mac_address,omitempty"`
+
+	// OOB Management
+	//
+	// This interface is used only for out-of-band management
+	MgmtOnly bool `json:"mgmt_only,omitempty"`
+
+	// mode
+	// Required: true
+	Mode *InterfaceMode `json:"mode"`
+
+	// MTU
+	// Maximum: 32767
+	// Minimum: 0
+	Mtu *int64 `json:"mtu,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 64
+	Name *string `json:"name"`
+
+	// tagged vlans
+	// Required: true
+	TaggedVlans InterfaceTaggedVlans `json:"tagged_vlans"`
+
+	// untagged vlan
+	// Required: true
+	UntaggedVlan *InterfaceVLAN `json:"untagged_vlan"`
+}
+
+// Validate validates this interface
+func (m *Interface) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCircuitTermination(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateFormFactor(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateLag(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateMode(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateMtu(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateTaggedVlans(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateUntaggedVlan(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Interface) validateCircuitTermination(formats strfmt.Registry) error {
+
+	if err := validate.Required("circuit_termination", "body", m.CircuitTermination); err != nil {
+		return err
+	}
+
+	if m.CircuitTermination != nil {
+
+		if err := m.CircuitTermination.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("circuit_termination")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Interface) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Interface) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	if m.Device != nil {
+
+		if err := m.Device.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Interface) validateFormFactor(formats strfmt.Registry) error {
+
+	if err := validate.Required("form_factor", "body", m.FormFactor); err != nil {
+		return err
+	}
+
+	if m.FormFactor != nil {
+
+		if err := m.FormFactor.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("form_factor")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Interface) validateLag(formats strfmt.Registry) error {
+
+	if err := validate.Required("lag", "body", m.Lag); err != nil {
+		return err
+	}
+
+	if m.Lag != nil {
+
+		if err := m.Lag.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("lag")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Interface) validateMode(formats strfmt.Registry) error {
+
+	if err := validate.Required("mode", "body", m.Mode); err != nil {
+		return err
+	}
+
+	if m.Mode != nil {
+
+		if err := m.Mode.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("mode")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Interface) validateMtu(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Mtu) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("mtu", "body", int64(*m.Mtu), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("mtu", "body", int64(*m.Mtu), 32767, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Interface) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Interface) validateTaggedVlans(formats strfmt.Registry) error {
+
+	if err := validate.Required("tagged_vlans", "body", m.TaggedVlans); err != nil {
+		return err
+	}
+
+	if err := m.TaggedVlans.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("tagged_vlans")
+		}
+		return err
+	}
+
+	return nil
+}
+
+func (m *Interface) validateUntaggedVlan(formats strfmt.Registry) error {
+
+	if err := validate.Required("untagged_vlan", "body", m.UntaggedVlan); err != nil {
+		return err
+	}
+
+	if m.UntaggedVlan != nil {
+
+		if err := m.UntaggedVlan.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("untagged_vlan")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Interface) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Interface) UnmarshalBinary(b []byte) error {
+	var res Interface
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_circuit_termination.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_circuit_termination.go
new file mode 100644
index 0000000..6aff3dd
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_circuit_termination.go
@@ -0,0 +1,246 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// InterfaceCircuitTermination Circuit termination
+// swagger:model InterfaceCircuitTermination
+type InterfaceCircuitTermination struct {
+
+	// circuit
+	// Required: true
+	Circuit *InterfaceNestedCircuit `json:"circuit"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Port speed (Kbps)
+	// Required: true
+	// Maximum: 2.147483647e+09
+	// Minimum: 0
+	PortSpeed *int64 `json:"port_speed"`
+
+	// Patch panel/port(s)
+	// Max Length: 100
+	PpInfo string `json:"pp_info,omitempty"`
+
+	// Termination
+	// Required: true
+	TermSide *string `json:"term_side"`
+
+	// Upstream speed (Kbps)
+	//
+	// Upstream speed, if different from port speed
+	// Maximum: 2.147483647e+09
+	// Minimum: 0
+	UpstreamSpeed *int64 `json:"upstream_speed,omitempty"`
+
+	// Cross-connect ID
+	// Max Length: 50
+	XconnectID string `json:"xconnect_id,omitempty"`
+}
+
+// Validate validates this interface circuit termination
+func (m *InterfaceCircuitTermination) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCircuit(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePortSpeed(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePpInfo(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateTermSide(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateUpstreamSpeed(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateXconnectID(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *InterfaceCircuitTermination) validateCircuit(formats strfmt.Registry) error {
+
+	if err := validate.Required("circuit", "body", m.Circuit); err != nil {
+		return err
+	}
+
+	if m.Circuit != nil {
+
+		if err := m.Circuit.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("circuit")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *InterfaceCircuitTermination) validatePortSpeed(formats strfmt.Registry) error {
+
+	if err := validate.Required("port_speed", "body", m.PortSpeed); err != nil {
+		return err
+	}
+
+	if err := validate.MinimumInt("port_speed", "body", int64(*m.PortSpeed), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("port_speed", "body", int64(*m.PortSpeed), 2.147483647e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *InterfaceCircuitTermination) validatePpInfo(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.PpInfo) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("pp_info", "body", string(m.PpInfo), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var interfaceCircuitTerminationTypeTermSidePropEnum []interface{}
+
+func init() {
+	var res []string
+	if err := json.Unmarshal([]byte(`["A","Z"]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		interfaceCircuitTerminationTypeTermSidePropEnum = append(interfaceCircuitTerminationTypeTermSidePropEnum, v)
+	}
+}
+
+const (
+	// InterfaceCircuitTerminationTermSideA captures enum value "A"
+	InterfaceCircuitTerminationTermSideA string = "A"
+	// InterfaceCircuitTerminationTermSideZ captures enum value "Z"
+	InterfaceCircuitTerminationTermSideZ string = "Z"
+)
+
+// prop value enum
+func (m *InterfaceCircuitTermination) validateTermSideEnum(path, location string, value string) error {
+	if err := validate.Enum(path, location, value, interfaceCircuitTerminationTypeTermSidePropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *InterfaceCircuitTermination) validateTermSide(formats strfmt.Registry) error {
+
+	if err := validate.Required("term_side", "body", m.TermSide); err != nil {
+		return err
+	}
+
+	// value enum
+	if err := m.validateTermSideEnum("term_side", "body", *m.TermSide); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *InterfaceCircuitTermination) validateUpstreamSpeed(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.UpstreamSpeed) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("upstream_speed", "body", int64(*m.UpstreamSpeed), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("upstream_speed", "body", int64(*m.UpstreamSpeed), 2.147483647e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *InterfaceCircuitTermination) validateXconnectID(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.XconnectID) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("xconnect_id", "body", string(m.XconnectID), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *InterfaceCircuitTermination) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *InterfaceCircuitTermination) UnmarshalBinary(b []byte) error {
+	var res InterfaceCircuitTermination
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_connection.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_connection.go
new file mode 100644
index 0000000..bfd036d
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_connection.go
@@ -0,0 +1,149 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// InterfaceConnection interface connection
+// swagger:model InterfaceConnection
+type InterfaceConnection struct {
+
+	// connection status
+	// Required: true
+	ConnectionStatus *InterfaceConnectionConnectionStatus `json:"connection_status"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// interface a
+	// Required: true
+	InterfaceA *PeerInterface `json:"interface_a"`
+
+	// interface b
+	// Required: true
+	InterfaceB *PeerInterface `json:"interface_b"`
+}
+
+// Validate validates this interface connection
+func (m *InterfaceConnection) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateConnectionStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateInterfaceA(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateInterfaceB(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *InterfaceConnection) validateConnectionStatus(formats strfmt.Registry) error {
+
+	if err := validate.Required("connection_status", "body", m.ConnectionStatus); err != nil {
+		return err
+	}
+
+	if m.ConnectionStatus != nil {
+
+		if err := m.ConnectionStatus.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("connection_status")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *InterfaceConnection) validateInterfaceA(formats strfmt.Registry) error {
+
+	if err := validate.Required("interface_a", "body", m.InterfaceA); err != nil {
+		return err
+	}
+
+	if m.InterfaceA != nil {
+
+		if err := m.InterfaceA.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("interface_a")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *InterfaceConnection) validateInterfaceB(formats strfmt.Registry) error {
+
+	if err := validate.Required("interface_b", "body", m.InterfaceB); err != nil {
+		return err
+	}
+
+	if m.InterfaceB != nil {
+
+		if err := m.InterfaceB.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("interface_b")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *InterfaceConnection) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *InterfaceConnection) UnmarshalBinary(b []byte) error {
+	var res InterfaceConnection
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_connection_connection_status.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_connection_connection_status.go
new file mode 100644
index 0000000..37766d7
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_connection_connection_status.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// InterfaceConnectionConnectionStatus Connection status
+// swagger:model interfaceConnectionConnectionStatus
+type InterfaceConnectionConnectionStatus struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *bool `json:"value"`
+}
+
+// Validate validates this interface connection connection status
+func (m *InterfaceConnectionConnectionStatus) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *InterfaceConnectionConnectionStatus) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *InterfaceConnectionConnectionStatus) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *InterfaceConnectionConnectionStatus) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *InterfaceConnectionConnectionStatus) UnmarshalBinary(b []byte) error {
+	var res InterfaceConnectionConnectionStatus
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_form_factor.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_form_factor.go
new file mode 100644
index 0000000..bfb96b7
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_form_factor.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// InterfaceFormFactor Form factor
+// swagger:model interfaceFormFactor
+type InterfaceFormFactor struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this interface form factor
+func (m *InterfaceFormFactor) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *InterfaceFormFactor) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *InterfaceFormFactor) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *InterfaceFormFactor) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *InterfaceFormFactor) UnmarshalBinary(b []byte) error {
+	var res InterfaceFormFactor
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_mode.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_mode.go
new file mode 100644
index 0000000..417aa81
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_mode.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// InterfaceMode Mode
+// swagger:model interfaceMode
+type InterfaceMode struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this interface mode
+func (m *InterfaceMode) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *InterfaceMode) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *InterfaceMode) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *InterfaceMode) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *InterfaceMode) UnmarshalBinary(b []byte) error {
+	var res InterfaceMode
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_nested_circuit.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_nested_circuit.go
new file mode 100644
index 0000000..9f1bca8
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_nested_circuit.go
@@ -0,0 +1,92 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// InterfaceNestedCircuit Circuit
+// swagger:model InterfaceNestedCircuit
+type InterfaceNestedCircuit struct {
+
+	// Circuit ID
+	// Required: true
+	// Max Length: 50
+	Cid *string `json:"cid"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this interface nested circuit
+func (m *InterfaceNestedCircuit) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCid(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *InterfaceNestedCircuit) validateCid(formats strfmt.Registry) error {
+
+	if err := validate.Required("cid", "body", m.Cid); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("cid", "body", string(*m.Cid), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *InterfaceNestedCircuit) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *InterfaceNestedCircuit) UnmarshalBinary(b []byte) error {
+	var res InterfaceNestedCircuit
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_tagged_vlans.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_tagged_vlans.go
new file mode 100644
index 0000000..8771a55
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_tagged_vlans.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// InterfaceTaggedVlans interface tagged vlans
+// swagger:model interfaceTaggedVlans
+type InterfaceTaggedVlans []*InterfaceVLAN
+
+// Validate validates this interface tagged vlans
+func (m InterfaceTaggedVlans) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_template.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_template.go
new file mode 100644
index 0000000..d3f7ed8
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_template.go
@@ -0,0 +1,147 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// InterfaceTemplate interface template
+// swagger:model InterfaceTemplate
+type InterfaceTemplate struct {
+
+	// device type
+	// Required: true
+	DeviceType *NestedDeviceType `json:"device_type"`
+
+	// form factor
+	// Required: true
+	FormFactor *InterfaceTemplateFormFactor `json:"form_factor"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Management only
+	MgmtOnly bool `json:"mgmt_only,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 64
+	Name *string `json:"name"`
+}
+
+// Validate validates this interface template
+func (m *InterfaceTemplate) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDeviceType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateFormFactor(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *InterfaceTemplate) validateDeviceType(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_type", "body", m.DeviceType); err != nil {
+		return err
+	}
+
+	if m.DeviceType != nil {
+
+		if err := m.DeviceType.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device_type")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *InterfaceTemplate) validateFormFactor(formats strfmt.Registry) error {
+
+	if err := validate.Required("form_factor", "body", m.FormFactor); err != nil {
+		return err
+	}
+
+	if m.FormFactor != nil {
+
+		if err := m.FormFactor.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("form_factor")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *InterfaceTemplate) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *InterfaceTemplate) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *InterfaceTemplate) UnmarshalBinary(b []byte) error {
+	var res InterfaceTemplate
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_template_form_factor.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_template_form_factor.go
new file mode 100644
index 0000000..89e8a1f
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_template_form_factor.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// InterfaceTemplateFormFactor Form factor
+// swagger:model interfaceTemplateFormFactor
+type InterfaceTemplateFormFactor struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this interface template form factor
+func (m *InterfaceTemplateFormFactor) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *InterfaceTemplateFormFactor) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *InterfaceTemplateFormFactor) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *InterfaceTemplateFormFactor) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *InterfaceTemplateFormFactor) UnmarshalBinary(b []byte) error {
+	var res InterfaceTemplateFormFactor
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_vlan.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_vlan.go
new file mode 100644
index 0000000..99d4154
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/interface_vlan.go
@@ -0,0 +1,124 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// InterfaceVLAN Untagged vlan
+// swagger:model InterfaceVLAN
+type InterfaceVLAN struct {
+
+	// Display name
+	// Read Only: true
+	DisplayName string `json:"display_name,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 64
+	Name *string `json:"name"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+
+	// ID
+	// Required: true
+	// Maximum: 4094
+	// Minimum: 1
+	Vid *int64 `json:"vid"`
+}
+
+// Validate validates this interface v l a n
+func (m *InterfaceVLAN) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateVid(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *InterfaceVLAN) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *InterfaceVLAN) validateVid(formats strfmt.Registry) error {
+
+	if err := validate.Required("vid", "body", m.Vid); err != nil {
+		return err
+	}
+
+	if err := validate.MinimumInt("vid", "body", int64(*m.Vid), 1, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("vid", "body", int64(*m.Vid), 4094, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *InterfaceVLAN) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *InterfaceVLAN) UnmarshalBinary(b []byte) error {
+	var res InterfaceVLAN
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/inventory_item.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/inventory_item.go
new file mode 100644
index 0000000..3b7883b
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/inventory_item.go
@@ -0,0 +1,255 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// InventoryItem inventory item
+// swagger:model InventoryItem
+type InventoryItem struct {
+
+	// Asset tag
+	//
+	// A unique tag used to identify this item
+	// Max Length: 50
+	AssetTag string `json:"asset_tag,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// device
+	// Required: true
+	Device *NestedDevice `json:"device"`
+
+	// Discovered
+	Discovered bool `json:"discovered,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// manufacturer
+	// Required: true
+	Manufacturer *NestedManufacturer `json:"manufacturer"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Parent
+	// Required: true
+	Parent *int64 `json:"parent"`
+
+	// Part ID
+	// Max Length: 50
+	PartID string `json:"part_id,omitempty"`
+
+	// Serial number
+	// Max Length: 50
+	Serial string `json:"serial,omitempty"`
+}
+
+// Validate validates this inventory item
+func (m *InventoryItem) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateAssetTag(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateManufacturer(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateParent(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePartID(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSerial(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *InventoryItem) validateAssetTag(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.AssetTag) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("asset_tag", "body", string(m.AssetTag), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *InventoryItem) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *InventoryItem) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	if m.Device != nil {
+
+		if err := m.Device.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *InventoryItem) validateManufacturer(formats strfmt.Registry) error {
+
+	if err := validate.Required("manufacturer", "body", m.Manufacturer); err != nil {
+		return err
+	}
+
+	if m.Manufacturer != nil {
+
+		if err := m.Manufacturer.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("manufacturer")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *InventoryItem) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *InventoryItem) validateParent(formats strfmt.Registry) error {
+
+	if err := validate.Required("parent", "body", m.Parent); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *InventoryItem) validatePartID(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.PartID) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("part_id", "body", string(m.PartID), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *InventoryItem) validateSerial(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Serial) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("serial", "body", string(m.Serial), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *InventoryItem) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *InventoryItem) UnmarshalBinary(b []byte) error {
+	var res InventoryItem
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_address.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_address.go
new file mode 100644
index 0000000..32c582d
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_address.go
@@ -0,0 +1,318 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IPAddress IP address
+// swagger:model IPAddress
+type IPAddress struct {
+
+	// Address
+	//
+	// IPv4 or IPv6 address (with mask)
+	// Required: true
+	Address *string `json:"address"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// Family
+	// Read Only: true
+	Family int64 `json:"family,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// interface
+	// Required: true
+	Interface *IPAddressInterface `json:"interface"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// nat inside
+	// Required: true
+	NatInside *NestedIPAddress `json:"nat_inside"`
+
+	// nat outside
+	// Required: true
+	NatOutside *NestedIPAddress `json:"nat_outside"`
+
+	// role
+	// Required: true
+	Role *IPAddressRole `json:"role"`
+
+	// status
+	// Required: true
+	Status *IPAddressStatus `json:"status"`
+
+	// tenant
+	// Required: true
+	Tenant *NestedTenant `json:"tenant"`
+
+	// vrf
+	// Required: true
+	Vrf *NestedVRF `json:"vrf"`
+}
+
+// Validate validates this IP address
+func (m *IPAddress) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateAddress(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateInterface(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateNatInside(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateNatOutside(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRole(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateTenant(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateVrf(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IPAddress) validateAddress(formats strfmt.Registry) error {
+
+	if err := validate.Required("address", "body", m.Address); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *IPAddress) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *IPAddress) validateInterface(formats strfmt.Registry) error {
+
+	if err := validate.Required("interface", "body", m.Interface); err != nil {
+		return err
+	}
+
+	if m.Interface != nil {
+
+		if err := m.Interface.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("interface")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *IPAddress) validateNatInside(formats strfmt.Registry) error {
+
+	if err := validate.Required("nat_inside", "body", m.NatInside); err != nil {
+		return err
+	}
+
+	if m.NatInside != nil {
+
+		if err := m.NatInside.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("nat_inside")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *IPAddress) validateNatOutside(formats strfmt.Registry) error {
+
+	if err := validate.Required("nat_outside", "body", m.NatOutside); err != nil {
+		return err
+	}
+
+	if m.NatOutside != nil {
+
+		if err := m.NatOutside.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("nat_outside")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *IPAddress) validateRole(formats strfmt.Registry) error {
+
+	if err := validate.Required("role", "body", m.Role); err != nil {
+		return err
+	}
+
+	if m.Role != nil {
+
+		if err := m.Role.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("role")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *IPAddress) validateStatus(formats strfmt.Registry) error {
+
+	if err := validate.Required("status", "body", m.Status); err != nil {
+		return err
+	}
+
+	if m.Status != nil {
+
+		if err := m.Status.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("status")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *IPAddress) validateTenant(formats strfmt.Registry) error {
+
+	if err := validate.Required("tenant", "body", m.Tenant); err != nil {
+		return err
+	}
+
+	if m.Tenant != nil {
+
+		if err := m.Tenant.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("tenant")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *IPAddress) validateVrf(formats strfmt.Registry) error {
+
+	if err := validate.Required("vrf", "body", m.Vrf); err != nil {
+		return err
+	}
+
+	if m.Vrf != nil {
+
+		if err := m.Vrf.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("vrf")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IPAddress) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IPAddress) UnmarshalBinary(b []byte) error {
+	var res IPAddress
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_address_interface.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_address_interface.go
new file mode 100644
index 0000000..4138ae4
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_address_interface.go
@@ -0,0 +1,148 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IPAddressInterface Interface
+// swagger:model IPAddressInterface
+type IPAddressInterface struct {
+
+	// device
+	// Required: true
+	Device *NestedDevice `json:"device"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 64
+	Name *string `json:"name"`
+
+	// Url
+	// Read Only: true
+	URL string `json:"url,omitempty"`
+
+	// virtual machine
+	// Required: true
+	VirtualMachine *NestedVirtualMachine `json:"virtual_machine"`
+}
+
+// Validate validates this IP address interface
+func (m *IPAddressInterface) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateVirtualMachine(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IPAddressInterface) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	if m.Device != nil {
+
+		if err := m.Device.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *IPAddressInterface) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *IPAddressInterface) validateVirtualMachine(formats strfmt.Registry) error {
+
+	if err := validate.Required("virtual_machine", "body", m.VirtualMachine); err != nil {
+		return err
+	}
+
+	if m.VirtualMachine != nil {
+
+		if err := m.VirtualMachine.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("virtual_machine")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IPAddressInterface) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IPAddressInterface) UnmarshalBinary(b []byte) error {
+	var res IPAddressInterface
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_address_role.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_address_role.go
new file mode 100644
index 0000000..cd8441e
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_address_role.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IPAddressRole Role
+// swagger:model ipAddressRole
+type IPAddressRole struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this ip address role
+func (m *IPAddressRole) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IPAddressRole) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *IPAddressRole) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IPAddressRole) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IPAddressRole) UnmarshalBinary(b []byte) error {
+	var res IPAddressRole
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_address_status.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_address_status.go
new file mode 100644
index 0000000..54ec03e
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_address_status.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IPAddressStatus Status
+// swagger:model ipAddressStatus
+type IPAddressStatus struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this ip address status
+func (m *IPAddressStatus) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IPAddressStatus) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *IPAddressStatus) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IPAddressStatus) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IPAddressStatus) UnmarshalBinary(b []byte) error {
+	var res IPAddressStatus
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amaggregates_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amaggregates_list_okbody.go
new file mode 100644
index 0000000..e43ff0a
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amaggregates_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IPAMAggregatesListOKBody ipam aggregates list o k body
+// swagger:model ipamAggregatesListOKBody
+type IPAMAggregatesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results IPAMAggregatesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this ipam aggregates list o k body
+func (m *IPAMAggregatesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IPAMAggregatesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *IPAMAggregatesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IPAMAggregatesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IPAMAggregatesListOKBody) UnmarshalBinary(b []byte) error {
+	var res IPAMAggregatesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amaggregates_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amaggregates_list_okbody_results.go
new file mode 100644
index 0000000..e93c2aa
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amaggregates_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// IPAMAggregatesListOKBodyResults ipam aggregates list o k body results
+// swagger:model ipamAggregatesListOKBodyResults
+type IPAMAggregatesListOKBodyResults []*Aggregate
+
+// Validate validates this ipam aggregates list o k body results
+func (m IPAMAggregatesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amip_addresses_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amip_addresses_list_okbody.go
new file mode 100644
index 0000000..3453bfd
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amip_addresses_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IPAMIPAddressesListOKBody ipam Ip addresses list o k body
+// swagger:model ipamIpAddressesListOKBody
+type IPAMIPAddressesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results IPAMIPAddressesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this ipam Ip addresses list o k body
+func (m *IPAMIPAddressesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IPAMIPAddressesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *IPAMIPAddressesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IPAMIPAddressesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IPAMIPAddressesListOKBody) UnmarshalBinary(b []byte) error {
+	var res IPAMIPAddressesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amip_addresses_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amip_addresses_list_okbody_results.go
new file mode 100644
index 0000000..86968c6
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amip_addresses_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// IPAMIPAddressesListOKBodyResults ipam Ip addresses list o k body results
+// swagger:model ipamIpAddressesListOKBodyResults
+type IPAMIPAddressesListOKBodyResults []*IPAddress
+
+// Validate validates this ipam Ip addresses list o k body results
+func (m IPAMIPAddressesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amprefixes_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amprefixes_list_okbody.go
new file mode 100644
index 0000000..3a0455f
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amprefixes_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IPAMPrefixesListOKBody ipam prefixes list o k body
+// swagger:model ipamPrefixesListOKBody
+type IPAMPrefixesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results IPAMPrefixesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this ipam prefixes list o k body
+func (m *IPAMPrefixesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IPAMPrefixesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *IPAMPrefixesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IPAMPrefixesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IPAMPrefixesListOKBody) UnmarshalBinary(b []byte) error {
+	var res IPAMPrefixesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amprefixes_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amprefixes_list_okbody_results.go
new file mode 100644
index 0000000..7d5ae3a
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amprefixes_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// IPAMPrefixesListOKBodyResults ipam prefixes list o k body results
+// swagger:model ipamPrefixesListOKBodyResults
+type IPAMPrefixesListOKBodyResults []*Prefix
+
+// Validate validates this ipam prefixes list o k body results
+func (m IPAMPrefixesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amrirs_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amrirs_list_okbody.go
new file mode 100644
index 0000000..97aab23
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amrirs_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IPAMRirsListOKBody ipam rirs list o k body
+// swagger:model ipamRirsListOKBody
+type IPAMRirsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results IPAMRirsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this ipam rirs list o k body
+func (m *IPAMRirsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IPAMRirsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *IPAMRirsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IPAMRirsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IPAMRirsListOKBody) UnmarshalBinary(b []byte) error {
+	var res IPAMRirsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amrirs_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amrirs_list_okbody_results.go
new file mode 100644
index 0000000..a817774
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amrirs_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// IPAMRirsListOKBodyResults ipam rirs list o k body results
+// swagger:model ipamRirsListOKBodyResults
+type IPAMRirsListOKBodyResults []*RIR
+
+// Validate validates this ipam rirs list o k body results
+func (m IPAMRirsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amroles_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amroles_list_okbody.go
new file mode 100644
index 0000000..044fa6b
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amroles_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IPAMRolesListOKBody ipam roles list o k body
+// swagger:model ipamRolesListOKBody
+type IPAMRolesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results IPAMRolesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this ipam roles list o k body
+func (m *IPAMRolesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IPAMRolesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *IPAMRolesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IPAMRolesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IPAMRolesListOKBody) UnmarshalBinary(b []byte) error {
+	var res IPAMRolesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amroles_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amroles_list_okbody_results.go
new file mode 100644
index 0000000..eda1619
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amroles_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// IPAMRolesListOKBodyResults ipam roles list o k body results
+// swagger:model ipamRolesListOKBodyResults
+type IPAMRolesListOKBodyResults []*Role
+
+// Validate validates this ipam roles list o k body results
+func (m IPAMRolesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amservices_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amservices_list_okbody.go
new file mode 100644
index 0000000..43866d0
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amservices_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IPAMServicesListOKBody ipam services list o k body
+// swagger:model ipamServicesListOKBody
+type IPAMServicesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results IPAMServicesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this ipam services list o k body
+func (m *IPAMServicesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IPAMServicesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *IPAMServicesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IPAMServicesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IPAMServicesListOKBody) UnmarshalBinary(b []byte) error {
+	var res IPAMServicesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amservices_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amservices_list_okbody_results.go
new file mode 100644
index 0000000..6b88015
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amservices_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// IPAMServicesListOKBodyResults ipam services list o k body results
+// swagger:model ipamServicesListOKBodyResults
+type IPAMServicesListOKBodyResults []*Service
+
+// Validate validates this ipam services list o k body results
+func (m IPAMServicesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvlan_groups_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvlan_groups_list_okbody.go
new file mode 100644
index 0000000..c423bca
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvlan_groups_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IPAMVlanGroupsListOKBody ipam vlan groups list o k body
+// swagger:model ipamVlanGroupsListOKBody
+type IPAMVlanGroupsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results IPAMVlanGroupsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this ipam vlan groups list o k body
+func (m *IPAMVlanGroupsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IPAMVlanGroupsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *IPAMVlanGroupsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IPAMVlanGroupsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IPAMVlanGroupsListOKBody) UnmarshalBinary(b []byte) error {
+	var res IPAMVlanGroupsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvlan_groups_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvlan_groups_list_okbody_results.go
new file mode 100644
index 0000000..eca9774
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvlan_groups_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// IPAMVlanGroupsListOKBodyResults ipam vlan groups list o k body results
+// swagger:model ipamVlanGroupsListOKBodyResults
+type IPAMVlanGroupsListOKBodyResults []*VLANGroup
+
+// Validate validates this ipam vlan groups list o k body results
+func (m IPAMVlanGroupsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvlans_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvlans_list_okbody.go
new file mode 100644
index 0000000..7154bca
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvlans_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IPAMVlansListOKBody ipam vlans list o k body
+// swagger:model ipamVlansListOKBody
+type IPAMVlansListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results IPAMVlansListOKBodyResults `json:"results"`
+}
+
+// Validate validates this ipam vlans list o k body
+func (m *IPAMVlansListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IPAMVlansListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *IPAMVlansListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IPAMVlansListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IPAMVlansListOKBody) UnmarshalBinary(b []byte) error {
+	var res IPAMVlansListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvlans_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvlans_list_okbody_results.go
new file mode 100644
index 0000000..86a1ba0
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvlans_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// IPAMVlansListOKBodyResults ipam vlans list o k body results
+// swagger:model ipamVlansListOKBodyResults
+type IPAMVlansListOKBodyResults []*VLAN
+
+// Validate validates this ipam vlans list o k body results
+func (m IPAMVlansListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvrfs_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvrfs_list_okbody.go
new file mode 100644
index 0000000..5fefe55
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvrfs_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IPAMVrfsListOKBody ipam vrfs list o k body
+// swagger:model ipamVrfsListOKBody
+type IPAMVrfsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results IPAMVrfsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this ipam vrfs list o k body
+func (m *IPAMVrfsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IPAMVrfsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *IPAMVrfsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IPAMVrfsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IPAMVrfsListOKBody) UnmarshalBinary(b []byte) error {
+	var res IPAMVrfsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvrfs_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvrfs_list_okbody_results.go
new file mode 100644
index 0000000..7d069d8
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/ip_amvrfs_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// IPAMVrfsListOKBodyResults ipam vrfs list o k body results
+// swagger:model ipamVrfsListOKBodyResults
+type IPAMVrfsListOKBodyResults []*VRF
+
+// Validate validates this ipam vrfs list o k body results
+func (m IPAMVrfsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/manufacturer.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/manufacturer.go
new file mode 100644
index 0000000..9f4f211
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/manufacturer.go
@@ -0,0 +1,116 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Manufacturer manufacturer
+// swagger:model Manufacturer
+type Manufacturer struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this manufacturer
+func (m *Manufacturer) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Manufacturer) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Manufacturer) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Manufacturer) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Manufacturer) UnmarshalBinary(b []byte) error {
+	var res Manufacturer
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_circuit.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_circuit.go
new file mode 100644
index 0000000..14a77d9
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_circuit.go
@@ -0,0 +1,92 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedCircuit Circuit
+// swagger:model NestedCircuit
+type NestedCircuit struct {
+
+	// Circuit ID
+	// Required: true
+	// Max Length: 50
+	Cid *string `json:"cid"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested circuit
+func (m *NestedCircuit) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCid(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedCircuit) validateCid(formats strfmt.Registry) error {
+
+	if err := validate.Required("cid", "body", m.Cid); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("cid", "body", string(*m.Cid), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedCircuit) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedCircuit) UnmarshalBinary(b []byte) error {
+	var res NestedCircuit
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_circuit_type.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_circuit_type.go
new file mode 100644
index 0000000..b85491e
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_circuit_type.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedCircuitType Type
+// swagger:model NestedCircuitType
+type NestedCircuitType struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested circuit type
+func (m *NestedCircuitType) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedCircuitType) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedCircuitType) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedCircuitType) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedCircuitType) UnmarshalBinary(b []byte) error {
+	var res NestedCircuitType
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_cluster.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_cluster.go
new file mode 100644
index 0000000..01f2973
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_cluster.go
@@ -0,0 +1,92 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedCluster Cluster
+// swagger:model NestedCluster
+type NestedCluster struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 100
+	Name *string `json:"name"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested cluster
+func (m *NestedCluster) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedCluster) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedCluster) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedCluster) UnmarshalBinary(b []byte) error {
+	var res NestedCluster
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_cluster_group.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_cluster_group.go
new file mode 100644
index 0000000..8ecd05e
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_cluster_group.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedClusterGroup Group
+// swagger:model NestedClusterGroup
+type NestedClusterGroup struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested cluster group
+func (m *NestedClusterGroup) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedClusterGroup) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedClusterGroup) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedClusterGroup) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedClusterGroup) UnmarshalBinary(b []byte) error {
+	var res NestedClusterGroup
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_cluster_type.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_cluster_type.go
new file mode 100644
index 0000000..37e547b
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_cluster_type.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedClusterType Type
+// swagger:model NestedClusterType
+type NestedClusterType struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested cluster type
+func (m *NestedClusterType) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedClusterType) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedClusterType) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedClusterType) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedClusterType) UnmarshalBinary(b []byte) error {
+	var res NestedClusterType
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_device.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_device.go
new file mode 100644
index 0000000..4d562a8
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_device.go
@@ -0,0 +1,95 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedDevice Device
+// swagger:model NestedDevice
+type NestedDevice struct {
+
+	// Display name
+	// Read Only: true
+	DisplayName string `json:"display_name,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Max Length: 64
+	Name string `json:"name,omitempty"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested device
+func (m *NestedDevice) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedDevice) validateName(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Name) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("name", "body", string(m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedDevice) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedDevice) UnmarshalBinary(b []byte) error {
+	var res NestedDevice
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_device_role.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_device_role.go
new file mode 100644
index 0000000..f1fc28e
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_device_role.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedDeviceRole Device role
+// swagger:model NestedDeviceRole
+type NestedDeviceRole struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested device role
+func (m *NestedDeviceRole) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedDeviceRole) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedDeviceRole) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedDeviceRole) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedDeviceRole) UnmarshalBinary(b []byte) error {
+	var res NestedDeviceRole
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_device_type.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_device_type.go
new file mode 100644
index 0000000..1fb87ee
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_device_type.go
@@ -0,0 +1,148 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedDeviceType Device type
+// swagger:model NestedDeviceType
+type NestedDeviceType struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// manufacturer
+	// Required: true
+	Manufacturer *NestedManufacturer `json:"manufacturer"`
+
+	// Model
+	// Required: true
+	// Max Length: 50
+	Model *string `json:"model"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested device type
+func (m *NestedDeviceType) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateManufacturer(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateModel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedDeviceType) validateManufacturer(formats strfmt.Registry) error {
+
+	if err := validate.Required("manufacturer", "body", m.Manufacturer); err != nil {
+		return err
+	}
+
+	if m.Manufacturer != nil {
+
+		if err := m.Manufacturer.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("manufacturer")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *NestedDeviceType) validateModel(formats strfmt.Registry) error {
+
+	if err := validate.Required("model", "body", m.Model); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("model", "body", string(*m.Model), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedDeviceType) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedDeviceType) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedDeviceType) UnmarshalBinary(b []byte) error {
+	var res NestedDeviceType
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_interface.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_interface.go
new file mode 100644
index 0000000..f764ad9
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_interface.go
@@ -0,0 +1,92 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedInterface Lag
+// swagger:model NestedInterface
+type NestedInterface struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 64
+	Name *string `json:"name"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested interface
+func (m *NestedInterface) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedInterface) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedInterface) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedInterface) UnmarshalBinary(b []byte) error {
+	var res NestedInterface
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_ip_address.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_ip_address.go
new file mode 100644
index 0000000..b4cf100
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_ip_address.go
@@ -0,0 +1,93 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedIPAddress Nat inside
+// swagger:model NestedIPAddress
+type NestedIPAddress struct {
+
+	// Address
+	//
+	// IPv4 or IPv6 address (with mask)
+	// Required: true
+	Address *string `json:"address"`
+
+	// Family
+	// Read Only: true
+	Family int64 `json:"family,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested IP address
+func (m *NestedIPAddress) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateAddress(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedIPAddress) validateAddress(formats strfmt.Registry) error {
+
+	if err := validate.Required("address", "body", m.Address); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedIPAddress) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedIPAddress) UnmarshalBinary(b []byte) error {
+	var res NestedIPAddress
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_manufacturer.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_manufacturer.go
new file mode 100644
index 0000000..a0868af
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_manufacturer.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedManufacturer Manufacturer
+// swagger:model NestedManufacturer
+type NestedManufacturer struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested manufacturer
+func (m *NestedManufacturer) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedManufacturer) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedManufacturer) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedManufacturer) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedManufacturer) UnmarshalBinary(b []byte) error {
+	var res NestedManufacturer
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_platform.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_platform.go
new file mode 100644
index 0000000..25e19ce
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_platform.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedPlatform Platform
+// swagger:model NestedPlatform
+type NestedPlatform struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested platform
+func (m *NestedPlatform) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedPlatform) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedPlatform) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedPlatform) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedPlatform) UnmarshalBinary(b []byte) error {
+	var res NestedPlatform
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_provider.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_provider.go
new file mode 100644
index 0000000..2fa4752
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_provider.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedProvider Provider
+// swagger:model NestedProvider
+type NestedProvider struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested provider
+func (m *NestedProvider) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedProvider) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedProvider) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedProvider) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedProvider) UnmarshalBinary(b []byte) error {
+	var res NestedProvider
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_rack.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_rack.go
new file mode 100644
index 0000000..08c5b42
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_rack.go
@@ -0,0 +1,96 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedRack Rack
+// swagger:model NestedRack
+type NestedRack struct {
+
+	// Display name
+	// Read Only: true
+	DisplayName string `json:"display_name,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested rack
+func (m *NestedRack) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedRack) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedRack) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedRack) UnmarshalBinary(b []byte) error {
+	var res NestedRack
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_rack_group.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_rack_group.go
new file mode 100644
index 0000000..0f736ff
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_rack_group.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedRackGroup Group
+// swagger:model NestedRackGroup
+type NestedRackGroup struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested rack group
+func (m *NestedRackGroup) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedRackGroup) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedRackGroup) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedRackGroup) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedRackGroup) UnmarshalBinary(b []byte) error {
+	var res NestedRackGroup
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_rack_role.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_rack_role.go
new file mode 100644
index 0000000..191fe3a
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_rack_role.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedRackRole Role
+// swagger:model NestedRackRole
+type NestedRackRole struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested rack role
+func (m *NestedRackRole) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedRackRole) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedRackRole) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedRackRole) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedRackRole) UnmarshalBinary(b []byte) error {
+	var res NestedRackRole
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_region.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_region.go
new file mode 100644
index 0000000..0945a67
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_region.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedRegion Parent
+// swagger:model NestedRegion
+type NestedRegion struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested region
+func (m *NestedRegion) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedRegion) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedRegion) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedRegion) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedRegion) UnmarshalBinary(b []byte) error {
+	var res NestedRegion
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_rir.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_rir.go
new file mode 100644
index 0000000..33c67b4
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_rir.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedRIR Rir
+// swagger:model NestedRIR
+type NestedRIR struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested r i r
+func (m *NestedRIR) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedRIR) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedRIR) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedRIR) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedRIR) UnmarshalBinary(b []byte) error {
+	var res NestedRIR
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_role.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_role.go
new file mode 100644
index 0000000..8486baf
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_role.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedRole Role
+// swagger:model NestedRole
+type NestedRole struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested role
+func (m *NestedRole) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedRole) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedRole) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedRole) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedRole) UnmarshalBinary(b []byte) error {
+	var res NestedRole
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_secret_role.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_secret_role.go
new file mode 100644
index 0000000..ce948db
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_secret_role.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedSecretRole Role
+// swagger:model NestedSecretRole
+type NestedSecretRole struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested secret role
+func (m *NestedSecretRole) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedSecretRole) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedSecretRole) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedSecretRole) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedSecretRole) UnmarshalBinary(b []byte) error {
+	var res NestedSecretRole
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_site.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_site.go
new file mode 100644
index 0000000..3a3a7cb
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_site.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedSite Site
+// swagger:model NestedSite
+type NestedSite struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested site
+func (m *NestedSite) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedSite) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedSite) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedSite) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedSite) UnmarshalBinary(b []byte) error {
+	var res NestedSite
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_tenant.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_tenant.go
new file mode 100644
index 0000000..149c6b5
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_tenant.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedTenant Tenant
+// swagger:model NestedTenant
+type NestedTenant struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 30
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested tenant
+func (m *NestedTenant) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedTenant) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 30); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedTenant) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedTenant) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedTenant) UnmarshalBinary(b []byte) error {
+	var res NestedTenant
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_tenant_group.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_tenant_group.go
new file mode 100644
index 0000000..a31c47a
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_tenant_group.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedTenantGroup Group
+// swagger:model NestedTenantGroup
+type NestedTenantGroup struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested tenant group
+func (m *NestedTenantGroup) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedTenantGroup) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedTenantGroup) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedTenantGroup) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedTenantGroup) UnmarshalBinary(b []byte) error {
+	var res NestedTenantGroup
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_user.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_user.go
new file mode 100644
index 0000000..aaf5c83
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_user.go
@@ -0,0 +1,95 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedUser User
+// swagger:model NestedUser
+type NestedUser struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Username
+	//
+	// Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.
+	// Required: true
+	// Max Length: 150
+	// Pattern: ^[\w.@+-]+$
+	Username *string `json:"username"`
+}
+
+// Validate validates this nested user
+func (m *NestedUser) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateUsername(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedUser) validateUsername(formats strfmt.Registry) error {
+
+	if err := validate.Required("username", "body", m.Username); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("username", "body", string(*m.Username), 150); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("username", "body", string(*m.Username), `^[\w.@+-]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedUser) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedUser) UnmarshalBinary(b []byte) error {
+	var res NestedUser
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_virtual_machine.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_virtual_machine.go
new file mode 100644
index 0000000..0068bfb
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_virtual_machine.go
@@ -0,0 +1,92 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedVirtualMachine Virtual machine
+// swagger:model NestedVirtualMachine
+type NestedVirtualMachine struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 64
+	Name *string `json:"name"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested virtual machine
+func (m *NestedVirtualMachine) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedVirtualMachine) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedVirtualMachine) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedVirtualMachine) UnmarshalBinary(b []byte) error {
+	var res NestedVirtualMachine
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_vlan.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_vlan.go
new file mode 100644
index 0000000..a9b0dc5
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_vlan.go
@@ -0,0 +1,124 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedVLAN Vlan
+// swagger:model NestedVLAN
+type NestedVLAN struct {
+
+	// Display name
+	// Read Only: true
+	DisplayName string `json:"display_name,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 64
+	Name *string `json:"name"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+
+	// ID
+	// Required: true
+	// Maximum: 4094
+	// Minimum: 1
+	Vid *int64 `json:"vid"`
+}
+
+// Validate validates this nested v l a n
+func (m *NestedVLAN) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateVid(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedVLAN) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedVLAN) validateVid(formats strfmt.Registry) error {
+
+	if err := validate.Required("vid", "body", m.Vid); err != nil {
+		return err
+	}
+
+	if err := validate.MinimumInt("vid", "body", int64(*m.Vid), 1, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("vid", "body", int64(*m.Vid), 4094, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedVLAN) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedVLAN) UnmarshalBinary(b []byte) error {
+	var res NestedVLAN
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_vlangroup.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_vlangroup.go
new file mode 100644
index 0000000..89b2498
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_vlangroup.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedVLANGroup Group
+// swagger:model NestedVLANGroup
+type NestedVLANGroup struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested v l a n group
+func (m *NestedVLANGroup) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedVLANGroup) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedVLANGroup) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedVLANGroup) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedVLANGroup) UnmarshalBinary(b []byte) error {
+	var res NestedVLANGroup
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_vrf.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_vrf.go
new file mode 100644
index 0000000..d7c0556
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/nested_vrf.go
@@ -0,0 +1,115 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// NestedVRF Vrf
+// swagger:model NestedVRF
+type NestedVRF struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Route distinguisher
+	// Required: true
+	// Max Length: 21
+	Rd *string `json:"rd"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this nested v r f
+func (m *NestedVRF) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRd(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *NestedVRF) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *NestedVRF) validateRd(formats strfmt.Registry) error {
+
+	if err := validate.Required("rd", "body", m.Rd); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("rd", "body", string(*m.Rd), 21); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *NestedVRF) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *NestedVRF) UnmarshalBinary(b []byte) error {
+	var res NestedVRF
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/peer_interface.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/peer_interface.go
new file mode 100644
index 0000000..c10a366
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/peer_interface.go
@@ -0,0 +1,236 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// PeerInterface Interface a
+// swagger:model PeerInterface
+type PeerInterface struct {
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// device
+	// Required: true
+	Device *NestedDevice `json:"device"`
+
+	// Enabled
+	Enabled bool `json:"enabled,omitempty"`
+
+	// form factor
+	// Required: true
+	FormFactor *PeerInterfaceFormFactor `json:"form_factor"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// lag
+	// Required: true
+	Lag *NestedInterface `json:"lag"`
+
+	// MAC Address
+	MacAddress string `json:"mac_address,omitempty"`
+
+	// OOB Management
+	//
+	// This interface is used only for out-of-band management
+	MgmtOnly bool `json:"mgmt_only,omitempty"`
+
+	// MTU
+	// Maximum: 32767
+	// Minimum: 0
+	Mtu *int64 `json:"mtu,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 64
+	Name *string `json:"name"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this peer interface
+func (m *PeerInterface) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateFormFactor(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateLag(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateMtu(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *PeerInterface) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *PeerInterface) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	if m.Device != nil {
+
+		if err := m.Device.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *PeerInterface) validateFormFactor(formats strfmt.Registry) error {
+
+	if err := validate.Required("form_factor", "body", m.FormFactor); err != nil {
+		return err
+	}
+
+	if m.FormFactor != nil {
+
+		if err := m.FormFactor.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("form_factor")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *PeerInterface) validateLag(formats strfmt.Registry) error {
+
+	if err := validate.Required("lag", "body", m.Lag); err != nil {
+		return err
+	}
+
+	if m.Lag != nil {
+
+		if err := m.Lag.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("lag")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *PeerInterface) validateMtu(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Mtu) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("mtu", "body", int64(*m.Mtu), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("mtu", "body", int64(*m.Mtu), 32767, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *PeerInterface) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *PeerInterface) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *PeerInterface) UnmarshalBinary(b []byte) error {
+	var res PeerInterface
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/peer_interface_form_factor.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/peer_interface_form_factor.go
new file mode 100644
index 0000000..9964edc
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/peer_interface_form_factor.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// PeerInterfaceFormFactor Form factor
+// swagger:model peerInterfaceFormFactor
+type PeerInterfaceFormFactor struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this peer interface form factor
+func (m *PeerInterfaceFormFactor) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *PeerInterfaceFormFactor) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *PeerInterfaceFormFactor) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *PeerInterfaceFormFactor) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *PeerInterfaceFormFactor) UnmarshalBinary(b []byte) error {
+	var res PeerInterfaceFormFactor
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/platform.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/platform.go
new file mode 100644
index 0000000..64e0074
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/platform.go
@@ -0,0 +1,221 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Platform platform
+// swagger:model Platform
+type Platform struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// manufacturer
+	// Required: true
+	Manufacturer *NestedManufacturer `json:"manufacturer"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// NAPALM driver
+	//
+	// The name of the NAPALM driver to use when interacting with devices
+	// Max Length: 50
+	NapalmDriver string `json:"napalm_driver,omitempty"`
+
+	// Legacy RPC client
+	RPCClient string `json:"rpc_client,omitempty"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this platform
+func (m *Platform) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateManufacturer(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateNapalmDriver(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRPCClient(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Platform) validateManufacturer(formats strfmt.Registry) error {
+
+	if err := validate.Required("manufacturer", "body", m.Manufacturer); err != nil {
+		return err
+	}
+
+	if m.Manufacturer != nil {
+
+		if err := m.Manufacturer.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("manufacturer")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Platform) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Platform) validateNapalmDriver(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.NapalmDriver) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("napalm_driver", "body", string(m.NapalmDriver), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var platformTypeRPCClientPropEnum []interface{}
+
+func init() {
+	var res []string
+	if err := json.Unmarshal([]byte(`["juniper-junos","cisco-ios","opengear"]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		platformTypeRPCClientPropEnum = append(platformTypeRPCClientPropEnum, v)
+	}
+}
+
+const (
+	// PlatformRPCClientJuniperJunos captures enum value "juniper-junos"
+	PlatformRPCClientJuniperJunos string = "juniper-junos"
+	// PlatformRPCClientCiscoIos captures enum value "cisco-ios"
+	PlatformRPCClientCiscoIos string = "cisco-ios"
+	// PlatformRPCClientOpengear captures enum value "opengear"
+	PlatformRPCClientOpengear string = "opengear"
+)
+
+// prop value enum
+func (m *Platform) validateRPCClientEnum(path, location string, value string) error {
+	if err := validate.Enum(path, location, value, platformTypeRPCClientPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *Platform) validateRPCClient(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.RPCClient) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateRPCClientEnum("rpc_client", "body", m.RPCClient); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Platform) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Platform) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Platform) UnmarshalBinary(b []byte) error {
+	var res Platform
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/power_outlet.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/power_outlet.go
new file mode 100644
index 0000000..85a2c7d
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/power_outlet.go
@@ -0,0 +1,120 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// PowerOutlet Power outlet
+// swagger:model PowerOutlet
+type PowerOutlet struct {
+
+	// Connected port
+	// Read Only: true
+	ConnectedPort string `json:"connected_port,omitempty"`
+
+	// device
+	// Required: true
+	Device *NestedDevice `json:"device"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this power outlet
+func (m *PowerOutlet) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *PowerOutlet) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	if m.Device != nil {
+
+		if err := m.Device.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *PowerOutlet) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *PowerOutlet) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *PowerOutlet) UnmarshalBinary(b []byte) error {
+	var res PowerOutlet
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/power_outlet_template.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/power_outlet_template.go
new file mode 100644
index 0000000..a393cb2
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/power_outlet_template.go
@@ -0,0 +1,116 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// PowerOutletTemplate power outlet template
+// swagger:model PowerOutletTemplate
+type PowerOutletTemplate struct {
+
+	// device type
+	// Required: true
+	DeviceType *NestedDeviceType `json:"device_type"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this power outlet template
+func (m *PowerOutletTemplate) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDeviceType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *PowerOutletTemplate) validateDeviceType(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_type", "body", m.DeviceType); err != nil {
+		return err
+	}
+
+	if m.DeviceType != nil {
+
+		if err := m.DeviceType.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device_type")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *PowerOutletTemplate) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *PowerOutletTemplate) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *PowerOutletTemplate) UnmarshalBinary(b []byte) error {
+	var res PowerOutletTemplate
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/power_port.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/power_port.go
new file mode 100644
index 0000000..6b1fc4b
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/power_port.go
@@ -0,0 +1,188 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// PowerPort power port
+// swagger:model PowerPort
+type PowerPort struct {
+
+	// Connection status
+	ConnectionStatus bool `json:"connection_status,omitempty"`
+
+	// device
+	// Required: true
+	Device *NestedDevice `json:"device"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// power outlet
+	// Required: true
+	PowerOutlet *PowerOutlet `json:"power_outlet"`
+}
+
+// Validate validates this power port
+func (m *PowerPort) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateConnectionStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePowerOutlet(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+var powerPortTypeConnectionStatusPropEnum []interface{}
+
+func init() {
+	var res []bool
+	if err := json.Unmarshal([]byte(`[false,true]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		powerPortTypeConnectionStatusPropEnum = append(powerPortTypeConnectionStatusPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *PowerPort) validateConnectionStatusEnum(path, location string, value bool) error {
+	if err := validate.Enum(path, location, value, powerPortTypeConnectionStatusPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *PowerPort) validateConnectionStatus(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.ConnectionStatus) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateConnectionStatusEnum("connection_status", "body", m.ConnectionStatus); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *PowerPort) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	if m.Device != nil {
+
+		if err := m.Device.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *PowerPort) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *PowerPort) validatePowerOutlet(formats strfmt.Registry) error {
+
+	if err := validate.Required("power_outlet", "body", m.PowerOutlet); err != nil {
+		return err
+	}
+
+	if m.PowerOutlet != nil {
+
+		if err := m.PowerOutlet.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("power_outlet")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *PowerPort) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *PowerPort) UnmarshalBinary(b []byte) error {
+	var res PowerPort
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/power_port_template.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/power_port_template.go
new file mode 100644
index 0000000..7b628bb
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/power_port_template.go
@@ -0,0 +1,116 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// PowerPortTemplate power port template
+// swagger:model PowerPortTemplate
+type PowerPortTemplate struct {
+
+	// device type
+	// Required: true
+	DeviceType *NestedDeviceType `json:"device_type"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this power port template
+func (m *PowerPortTemplate) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDeviceType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *PowerPortTemplate) validateDeviceType(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_type", "body", m.DeviceType); err != nil {
+		return err
+	}
+
+	if m.DeviceType != nil {
+
+		if err := m.DeviceType.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device_type")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *PowerPortTemplate) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *PowerPortTemplate) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *PowerPortTemplate) UnmarshalBinary(b []byte) error {
+	var res PowerPortTemplate
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/prefix.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/prefix.go
new file mode 100644
index 0000000..a5ea409
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/prefix.go
@@ -0,0 +1,295 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Prefix prefix
+// swagger:model Prefix
+type Prefix struct {
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// Family
+	// Read Only: true
+	Family int64 `json:"family,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Is a pool
+	//
+	// All IP addresses within this prefix are considered usable
+	IsPool bool `json:"is_pool,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Prefix
+	//
+	// IPv4 or IPv6 network with mask
+	// Required: true
+	Prefix *string `json:"prefix"`
+
+	// role
+	// Required: true
+	Role *NestedRole `json:"role"`
+
+	// site
+	// Required: true
+	Site *NestedSite `json:"site"`
+
+	// status
+	// Required: true
+	Status *PrefixStatus `json:"status"`
+
+	// tenant
+	// Required: true
+	Tenant *NestedTenant `json:"tenant"`
+
+	// vlan
+	// Required: true
+	Vlan *NestedVLAN `json:"vlan"`
+
+	// vrf
+	// Required: true
+	Vrf *NestedVRF `json:"vrf"`
+}
+
+// Validate validates this prefix
+func (m *Prefix) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePrefix(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRole(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSite(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateTenant(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateVlan(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateVrf(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Prefix) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Prefix) validatePrefix(formats strfmt.Registry) error {
+
+	if err := validate.Required("prefix", "body", m.Prefix); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Prefix) validateRole(formats strfmt.Registry) error {
+
+	if err := validate.Required("role", "body", m.Role); err != nil {
+		return err
+	}
+
+	if m.Role != nil {
+
+		if err := m.Role.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("role")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Prefix) validateSite(formats strfmt.Registry) error {
+
+	if err := validate.Required("site", "body", m.Site); err != nil {
+		return err
+	}
+
+	if m.Site != nil {
+
+		if err := m.Site.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("site")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Prefix) validateStatus(formats strfmt.Registry) error {
+
+	if err := validate.Required("status", "body", m.Status); err != nil {
+		return err
+	}
+
+	if m.Status != nil {
+
+		if err := m.Status.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("status")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Prefix) validateTenant(formats strfmt.Registry) error {
+
+	if err := validate.Required("tenant", "body", m.Tenant); err != nil {
+		return err
+	}
+
+	if m.Tenant != nil {
+
+		if err := m.Tenant.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("tenant")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Prefix) validateVlan(formats strfmt.Registry) error {
+
+	if err := validate.Required("vlan", "body", m.Vlan); err != nil {
+		return err
+	}
+
+	if m.Vlan != nil {
+
+		if err := m.Vlan.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("vlan")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Prefix) validateVrf(formats strfmt.Registry) error {
+
+	if err := validate.Required("vrf", "body", m.Vrf); err != nil {
+		return err
+	}
+
+	if m.Vrf != nil {
+
+		if err := m.Vrf.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("vrf")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Prefix) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Prefix) UnmarshalBinary(b []byte) error {
+	var res Prefix
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/prefix_status.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/prefix_status.go
new file mode 100644
index 0000000..15c2528
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/prefix_status.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// PrefixStatus Status
+// swagger:model prefixStatus
+type PrefixStatus struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this prefix status
+func (m *PrefixStatus) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *PrefixStatus) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *PrefixStatus) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *PrefixStatus) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *PrefixStatus) UnmarshalBinary(b []byte) error {
+	var res PrefixStatus
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/provider.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/provider.go
new file mode 100644
index 0000000..e3add7a
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/provider.go
@@ -0,0 +1,211 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Provider provider
+// swagger:model Provider
+type Provider struct {
+
+	// Account number
+	// Max Length: 30
+	Account string `json:"account,omitempty"`
+
+	// Admin contact
+	AdminContact string `json:"admin_contact,omitempty"`
+
+	// ASN
+	// Maximum: 4.294967295e+09
+	// Minimum: 1
+	Asn int64 `json:"asn,omitempty"`
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// NOC contact
+	NocContact string `json:"noc_contact,omitempty"`
+
+	// Portal
+	// Max Length: 200
+	PortalURL strfmt.URI `json:"portal_url,omitempty"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this provider
+func (m *Provider) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateAccount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateAsn(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePortalURL(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Provider) validateAccount(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Account) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("account", "body", string(m.Account), 30); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Provider) validateAsn(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Asn) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("asn", "body", int64(m.Asn), 1, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("asn", "body", int64(m.Asn), 4.294967295e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Provider) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Provider) validatePortalURL(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.PortalURL) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("portal_url", "body", string(m.PortalURL), 200); err != nil {
+		return err
+	}
+
+	if err := validate.FormatOf("portal_url", "body", "uri", m.PortalURL.String(), formats); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Provider) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Provider) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Provider) UnmarshalBinary(b []byte) error {
+	var res Provider
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack.go
new file mode 100644
index 0000000..539df81
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack.go
@@ -0,0 +1,351 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Rack rack
+// swagger:model Rack
+type Rack struct {
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Descending units
+	//
+	// Units are numbered top-to-bottom
+	DescUnits bool `json:"desc_units,omitempty"`
+
+	// Display name
+	// Read Only: true
+	DisplayName string `json:"display_name,omitempty"`
+
+	// Facility ID
+	// Required: true
+	// Max Length: 50
+	FacilityID *string `json:"facility_id"`
+
+	// group
+	// Required: true
+	Group *NestedRackGroup `json:"group"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// role
+	// Required: true
+	Role *NestedRackRole `json:"role"`
+
+	// Serial number
+	// Max Length: 50
+	Serial string `json:"serial,omitempty"`
+
+	// site
+	// Required: true
+	Site *NestedSite `json:"site"`
+
+	// tenant
+	// Required: true
+	Tenant *NestedTenant `json:"tenant"`
+
+	// type
+	// Required: true
+	Type *RackType `json:"type"`
+
+	// Height (U)
+	// Maximum: 100
+	// Minimum: 1
+	UHeight int64 `json:"u_height,omitempty"`
+
+	// width
+	// Required: true
+	Width *RackWidth `json:"width"`
+}
+
+// Validate validates this rack
+func (m *Rack) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateFacilityID(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateGroup(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRole(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSerial(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSite(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateTenant(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateUHeight(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateWidth(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Rack) validateFacilityID(formats strfmt.Registry) error {
+
+	if err := validate.Required("facility_id", "body", m.FacilityID); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("facility_id", "body", string(*m.FacilityID), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Rack) validateGroup(formats strfmt.Registry) error {
+
+	if err := validate.Required("group", "body", m.Group); err != nil {
+		return err
+	}
+
+	if m.Group != nil {
+
+		if err := m.Group.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("group")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Rack) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Rack) validateRole(formats strfmt.Registry) error {
+
+	if err := validate.Required("role", "body", m.Role); err != nil {
+		return err
+	}
+
+	if m.Role != nil {
+
+		if err := m.Role.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("role")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Rack) validateSerial(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Serial) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("serial", "body", string(m.Serial), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Rack) validateSite(formats strfmt.Registry) error {
+
+	if err := validate.Required("site", "body", m.Site); err != nil {
+		return err
+	}
+
+	if m.Site != nil {
+
+		if err := m.Site.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("site")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Rack) validateTenant(formats strfmt.Registry) error {
+
+	if err := validate.Required("tenant", "body", m.Tenant); err != nil {
+		return err
+	}
+
+	if m.Tenant != nil {
+
+		if err := m.Tenant.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("tenant")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Rack) validateType(formats strfmt.Registry) error {
+
+	if err := validate.Required("type", "body", m.Type); err != nil {
+		return err
+	}
+
+	if m.Type != nil {
+
+		if err := m.Type.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("type")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Rack) validateUHeight(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.UHeight) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("u_height", "body", int64(m.UHeight), 1, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("u_height", "body", int64(m.UHeight), 100, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Rack) validateWidth(formats strfmt.Registry) error {
+
+	if err := validate.Required("width", "body", m.Width); err != nil {
+		return err
+	}
+
+	if m.Width != nil {
+
+		if err := m.Width.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("width")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Rack) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Rack) UnmarshalBinary(b []byte) error {
+	var res Rack
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack_group.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack_group.go
new file mode 100644
index 0000000..fadd59e
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack_group.go
@@ -0,0 +1,144 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// RackGroup rack group
+// swagger:model RackGroup
+type RackGroup struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// site
+	// Required: true
+	Site *NestedSite `json:"site"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this rack group
+func (m *RackGroup) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSite(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *RackGroup) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *RackGroup) validateSite(formats strfmt.Registry) error {
+
+	if err := validate.Required("site", "body", m.Site); err != nil {
+		return err
+	}
+
+	if m.Site != nil {
+
+		if err := m.Site.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("site")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *RackGroup) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *RackGroup) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *RackGroup) UnmarshalBinary(b []byte) error {
+	var res RackGroup
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack_reservation.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack_reservation.go
new file mode 100644
index 0000000..6b0a1a2
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack_reservation.go
@@ -0,0 +1,212 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// RackReservation rack reservation
+// swagger:model RackReservation
+type RackReservation struct {
+
+	// Created
+	// Read Only: true
+	Created strfmt.DateTime `json:"created,omitempty"`
+
+	// Description
+	// Required: true
+	// Max Length: 100
+	Description *string `json:"description"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// rack
+	// Required: true
+	Rack *NestedRack `json:"rack"`
+
+	// tenant
+	// Required: true
+	Tenant *NestedTenant `json:"tenant"`
+
+	// units
+	// Required: true
+	Units []*int64 `json:"units"`
+
+	// user
+	// Required: true
+	User *NestedUser `json:"user"`
+}
+
+// Validate validates this rack reservation
+func (m *RackReservation) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRack(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateTenant(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateUnits(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateUser(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *RackReservation) validateDescription(formats strfmt.Registry) error {
+
+	if err := validate.Required("description", "body", m.Description); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("description", "body", string(*m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *RackReservation) validateRack(formats strfmt.Registry) error {
+
+	if err := validate.Required("rack", "body", m.Rack); err != nil {
+		return err
+	}
+
+	if m.Rack != nil {
+
+		if err := m.Rack.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("rack")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *RackReservation) validateTenant(formats strfmt.Registry) error {
+
+	if err := validate.Required("tenant", "body", m.Tenant); err != nil {
+		return err
+	}
+
+	if m.Tenant != nil {
+
+		if err := m.Tenant.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("tenant")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *RackReservation) validateUnits(formats strfmt.Registry) error {
+
+	if err := validate.Required("units", "body", m.Units); err != nil {
+		return err
+	}
+
+	for i := 0; i < len(m.Units); i++ {
+
+		if swag.IsZero(m.Units[i]) { // not required
+			continue
+		}
+
+		if err := validate.MinimumInt("units"+"."+strconv.Itoa(i), "body", int64(*m.Units[i]), 0, false); err != nil {
+			return err
+		}
+
+		if err := validate.MaximumInt("units"+"."+strconv.Itoa(i), "body", int64(*m.Units[i]), 32767, false); err != nil {
+			return err
+		}
+
+	}
+
+	return nil
+}
+
+func (m *RackReservation) validateUser(formats strfmt.Registry) error {
+
+	if err := validate.Required("user", "body", m.User); err != nil {
+		return err
+	}
+
+	if m.User != nil {
+
+		if err := m.User.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("user")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *RackReservation) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *RackReservation) UnmarshalBinary(b []byte) error {
+	var res RackReservation
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack_role.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack_role.go
new file mode 100644
index 0000000..b0f6787
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack_role.go
@@ -0,0 +1,144 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// RackRole rack role
+// swagger:model RackRole
+type RackRole struct {
+
+	// Color
+	// Required: true
+	// Max Length: 6
+	// Pattern: ^[0-9a-f]{6}$
+	Color *string `json:"color"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this rack role
+func (m *RackRole) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateColor(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *RackRole) validateColor(formats strfmt.Registry) error {
+
+	if err := validate.Required("color", "body", m.Color); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("color", "body", string(*m.Color), 6); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("color", "body", string(*m.Color), `^[0-9a-f]{6}$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *RackRole) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *RackRole) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *RackRole) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *RackRole) UnmarshalBinary(b []byte) error {
+	var res RackRole
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack_type.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack_type.go
new file mode 100644
index 0000000..68259b5
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack_type.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// RackType Type
+// swagger:model rackType
+type RackType struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this rack type
+func (m *RackType) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *RackType) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *RackType) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *RackType) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *RackType) UnmarshalBinary(b []byte) error {
+	var res RackType
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack_width.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack_width.go
new file mode 100644
index 0000000..9ccf06e
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rack_width.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// RackWidth Width
+// swagger:model rackWidth
+type RackWidth struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this rack width
+func (m *RackWidth) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *RackWidth) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *RackWidth) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *RackWidth) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *RackWidth) UnmarshalBinary(b []byte) error {
+	var res RackWidth
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/region.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/region.go
new file mode 100644
index 0000000..08d951d
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/region.go
@@ -0,0 +1,144 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Region region
+// swagger:model Region
+type Region struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// parent
+	// Required: true
+	Parent *NestedRegion `json:"parent"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this region
+func (m *Region) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateParent(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Region) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Region) validateParent(formats strfmt.Registry) error {
+
+	if err := validate.Required("parent", "body", m.Parent); err != nil {
+		return err
+	}
+
+	if m.Parent != nil {
+
+		if err := m.Parent.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("parent")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Region) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Region) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Region) UnmarshalBinary(b []byte) error {
+	var res Region
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rir.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rir.go
new file mode 100644
index 0000000..16ddcc5
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/rir.go
@@ -0,0 +1,121 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// RIR r i r
+// swagger:model RIR
+type RIR struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Private
+	//
+	// IP space managed by this RIR is considered private
+	IsPrivate bool `json:"is_private,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this r i r
+func (m *RIR) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *RIR) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *RIR) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *RIR) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *RIR) UnmarshalBinary(b []byte) error {
+	var res RIR
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/role.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/role.go
new file mode 100644
index 0000000..dfc3fe8
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/role.go
@@ -0,0 +1,143 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Role role
+// swagger:model Role
+type Role struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Weight
+	// Maximum: 32767
+	// Minimum: 0
+	Weight *int64 `json:"weight,omitempty"`
+}
+
+// Validate validates this role
+func (m *Role) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateWeight(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Role) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Role) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Role) validateWeight(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Weight) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("weight", "body", int64(*m.Weight), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("weight", "body", int64(*m.Weight), 32767, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Role) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Role) UnmarshalBinary(b []byte) error {
+	var res Role
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secret.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secret.go
new file mode 100644
index 0000000..28320bf
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secret.go
@@ -0,0 +1,160 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Secret secret
+// swagger:model Secret
+type Secret struct {
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// device
+	// Required: true
+	Device *NestedDevice `json:"device"`
+
+	// Hash
+	// Read Only: true
+	Hash string `json:"hash,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 100
+	Name *string `json:"name"`
+
+	// Plaintext
+	// Read Only: true
+	Plaintext string `json:"plaintext,omitempty"`
+
+	// role
+	// Required: true
+	Role *NestedSecretRole `json:"role"`
+}
+
+// Validate validates this secret
+func (m *Secret) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRole(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Secret) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	if m.Device != nil {
+
+		if err := m.Device.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Secret) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Secret) validateRole(formats strfmt.Registry) error {
+
+	if err := validate.Required("role", "body", m.Role); err != nil {
+		return err
+	}
+
+	if m.Role != nil {
+
+		if err := m.Role.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("role")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Secret) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Secret) UnmarshalBinary(b []byte) error {
+	var res Secret
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secret_role.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secret_role.go
new file mode 100644
index 0000000..cf06bd3
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secret_role.go
@@ -0,0 +1,116 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// SecretRole secret role
+// swagger:model SecretRole
+type SecretRole struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this secret role
+func (m *SecretRole) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *SecretRole) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *SecretRole) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *SecretRole) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *SecretRole) UnmarshalBinary(b []byte) error {
+	var res SecretRole
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secrets_secret_roles_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secrets_secret_roles_list_okbody.go
new file mode 100644
index 0000000..5ffee8b
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secrets_secret_roles_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// SecretsSecretRolesListOKBody secrets secret roles list o k body
+// swagger:model secretsSecretRolesListOKBody
+type SecretsSecretRolesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results SecretsSecretRolesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this secrets secret roles list o k body
+func (m *SecretsSecretRolesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *SecretsSecretRolesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *SecretsSecretRolesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *SecretsSecretRolesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *SecretsSecretRolesListOKBody) UnmarshalBinary(b []byte) error {
+	var res SecretsSecretRolesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secrets_secret_roles_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secrets_secret_roles_list_okbody_results.go
new file mode 100644
index 0000000..fcab8a5
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secrets_secret_roles_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// SecretsSecretRolesListOKBodyResults secrets secret roles list o k body results
+// swagger:model secretsSecretRolesListOKBodyResults
+type SecretsSecretRolesListOKBodyResults []*SecretRole
+
+// Validate validates this secrets secret roles list o k body results
+func (m SecretsSecretRolesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secrets_secrets_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secrets_secrets_list_okbody.go
new file mode 100644
index 0000000..582eae5
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secrets_secrets_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// SecretsSecretsListOKBody secrets secrets list o k body
+// swagger:model secretsSecretsListOKBody
+type SecretsSecretsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results SecretsSecretsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this secrets secrets list o k body
+func (m *SecretsSecretsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *SecretsSecretsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *SecretsSecretsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *SecretsSecretsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *SecretsSecretsListOKBody) UnmarshalBinary(b []byte) error {
+	var res SecretsSecretsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secrets_secrets_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secrets_secrets_list_okbody_results.go
new file mode 100644
index 0000000..5e61fe9
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/secrets_secrets_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// SecretsSecretsListOKBodyResults secrets secrets list o k body results
+// swagger:model secretsSecretsListOKBodyResults
+type SecretsSecretsListOKBodyResults []*Secret
+
+// Validate validates this secrets secrets list o k body results
+func (m SecretsSecretsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/service.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/service.go
new file mode 100644
index 0000000..2a3ef99
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/service.go
@@ -0,0 +1,255 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Service service
+// swagger:model Service
+type Service struct {
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// device
+	// Required: true
+	Device *NestedDevice `json:"device"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// ipaddresses
+	// Required: true
+	Ipaddresses ServiceIpaddresses `json:"ipaddresses"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 30
+	Name *string `json:"name"`
+
+	// Port number
+	// Required: true
+	// Maximum: 65535
+	// Minimum: 1
+	Port *int64 `json:"port"`
+
+	// protocol
+	// Required: true
+	Protocol *ServiceProtocol `json:"protocol"`
+
+	// virtual machine
+	// Required: true
+	VirtualMachine *NestedVirtualMachine `json:"virtual_machine"`
+}
+
+// Validate validates this service
+func (m *Service) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateIpaddresses(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePort(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateProtocol(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateVirtualMachine(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Service) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Service) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	if m.Device != nil {
+
+		if err := m.Device.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("device")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Service) validateIpaddresses(formats strfmt.Registry) error {
+
+	if err := validate.Required("ipaddresses", "body", m.Ipaddresses); err != nil {
+		return err
+	}
+
+	if err := m.Ipaddresses.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("ipaddresses")
+		}
+		return err
+	}
+
+	return nil
+}
+
+func (m *Service) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 30); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Service) validatePort(formats strfmt.Registry) error {
+
+	if err := validate.Required("port", "body", m.Port); err != nil {
+		return err
+	}
+
+	if err := validate.MinimumInt("port", "body", int64(*m.Port), 1, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("port", "body", int64(*m.Port), 65535, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Service) validateProtocol(formats strfmt.Registry) error {
+
+	if err := validate.Required("protocol", "body", m.Protocol); err != nil {
+		return err
+	}
+
+	if m.Protocol != nil {
+
+		if err := m.Protocol.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("protocol")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Service) validateVirtualMachine(formats strfmt.Registry) error {
+
+	if err := validate.Required("virtual_machine", "body", m.VirtualMachine); err != nil {
+		return err
+	}
+
+	if m.VirtualMachine != nil {
+
+		if err := m.VirtualMachine.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("virtual_machine")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Service) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Service) UnmarshalBinary(b []byte) error {
+	var res Service
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/service_ipaddresses.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/service_ipaddresses.go
new file mode 100644
index 0000000..8cf99e7
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/service_ipaddresses.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// ServiceIpaddresses service ipaddresses
+// swagger:model serviceIpaddresses
+type ServiceIpaddresses []*NestedIPAddress
+
+// Validate validates this service ipaddresses
+func (m ServiceIpaddresses) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/service_protocol.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/service_protocol.go
new file mode 100644
index 0000000..6701ce6
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/service_protocol.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// ServiceProtocol Protocol
+// swagger:model serviceProtocol
+type ServiceProtocol struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this service protocol
+func (m *ServiceProtocol) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *ServiceProtocol) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *ServiceProtocol) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *ServiceProtocol) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *ServiceProtocol) UnmarshalBinary(b []byte) error {
+	var res ServiceProtocol
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/site.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/site.go
new file mode 100644
index 0000000..6d4c0ce
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/site.go
@@ -0,0 +1,422 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Site site
+// swagger:model Site
+type Site struct {
+
+	// ASN
+	// Maximum: 4.294967295e+09
+	// Minimum: 1
+	Asn int64 `json:"asn,omitempty"`
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Contact E-mail
+	// Max Length: 254
+	ContactEmail strfmt.Email `json:"contact_email,omitempty"`
+
+	// Contact name
+	// Max Length: 50
+	ContactName string `json:"contact_name,omitempty"`
+
+	// Contact phone
+	// Max Length: 20
+	ContactPhone string `json:"contact_phone,omitempty"`
+
+	// Count circuits
+	// Read Only: true
+	CountCircuits string `json:"count_circuits,omitempty"`
+
+	// Count devices
+	// Read Only: true
+	CountDevices string `json:"count_devices,omitempty"`
+
+	// Count prefixes
+	// Read Only: true
+	CountPrefixes string `json:"count_prefixes,omitempty"`
+
+	// Count racks
+	// Read Only: true
+	CountRacks string `json:"count_racks,omitempty"`
+
+	// Count vlans
+	// Read Only: true
+	CountVlans string `json:"count_vlans,omitempty"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// Facility
+	// Max Length: 50
+	Facility string `json:"facility,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Physical address
+	// Max Length: 200
+	PhysicalAddress string `json:"physical_address,omitempty"`
+
+	// region
+	// Required: true
+	Region *NestedRegion `json:"region"`
+
+	// Shipping address
+	// Max Length: 200
+	ShippingAddress string `json:"shipping_address,omitempty"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// status
+	// Required: true
+	Status *SiteStatus `json:"status"`
+
+	// tenant
+	// Required: true
+	Tenant *NestedTenant `json:"tenant"`
+
+	// Time zone
+	TimeZone string `json:"time_zone,omitempty"`
+}
+
+// Validate validates this site
+func (m *Site) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateAsn(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateContactEmail(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateContactName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateContactPhone(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateFacility(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePhysicalAddress(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRegion(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateShippingAddress(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateTenant(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Site) validateAsn(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Asn) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("asn", "body", int64(m.Asn), 1, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("asn", "body", int64(m.Asn), 4.294967295e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Site) validateContactEmail(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.ContactEmail) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("contact_email", "body", string(m.ContactEmail), 254); err != nil {
+		return err
+	}
+
+	if err := validate.FormatOf("contact_email", "body", "email", m.ContactEmail.String(), formats); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Site) validateContactName(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.ContactName) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("contact_name", "body", string(m.ContactName), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Site) validateContactPhone(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.ContactPhone) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("contact_phone", "body", string(m.ContactPhone), 20); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Site) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Site) validateFacility(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Facility) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("facility", "body", string(m.Facility), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Site) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Site) validatePhysicalAddress(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.PhysicalAddress) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("physical_address", "body", string(m.PhysicalAddress), 200); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Site) validateRegion(formats strfmt.Registry) error {
+
+	if err := validate.Required("region", "body", m.Region); err != nil {
+		return err
+	}
+
+	if m.Region != nil {
+
+		if err := m.Region.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("region")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Site) validateShippingAddress(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.ShippingAddress) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("shipping_address", "body", string(m.ShippingAddress), 200); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Site) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Site) validateStatus(formats strfmt.Registry) error {
+
+	if err := validate.Required("status", "body", m.Status); err != nil {
+		return err
+	}
+
+	if m.Status != nil {
+
+		if err := m.Status.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("status")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Site) validateTenant(formats strfmt.Registry) error {
+
+	if err := validate.Required("tenant", "body", m.Tenant); err != nil {
+		return err
+	}
+
+	if m.Tenant != nil {
+
+		if err := m.Tenant.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("tenant")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Site) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Site) UnmarshalBinary(b []byte) error {
+	var res Site
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/site_status.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/site_status.go
new file mode 100644
index 0000000..1280836
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/site_status.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// SiteStatus Status
+// swagger:model siteStatus
+type SiteStatus struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this site status
+func (m *SiteStatus) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *SiteStatus) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *SiteStatus) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *SiteStatus) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *SiteStatus) UnmarshalBinary(b []byte) error {
+	var res SiteStatus
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenancy_tenant_groups_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenancy_tenant_groups_list_okbody.go
new file mode 100644
index 0000000..7409990
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenancy_tenant_groups_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// TenancyTenantGroupsListOKBody tenancy tenant groups list o k body
+// swagger:model tenancyTenantGroupsListOKBody
+type TenancyTenantGroupsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results TenancyTenantGroupsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this tenancy tenant groups list o k body
+func (m *TenancyTenantGroupsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *TenancyTenantGroupsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *TenancyTenantGroupsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *TenancyTenantGroupsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *TenancyTenantGroupsListOKBody) UnmarshalBinary(b []byte) error {
+	var res TenancyTenantGroupsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenancy_tenant_groups_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenancy_tenant_groups_list_okbody_results.go
new file mode 100644
index 0000000..02f25a7
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenancy_tenant_groups_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// TenancyTenantGroupsListOKBodyResults tenancy tenant groups list o k body results
+// swagger:model tenancyTenantGroupsListOKBodyResults
+type TenancyTenantGroupsListOKBodyResults []*TenantGroup
+
+// Validate validates this tenancy tenant groups list o k body results
+func (m TenancyTenantGroupsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenancy_tenants_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenancy_tenants_list_okbody.go
new file mode 100644
index 0000000..664ae51
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenancy_tenants_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// TenancyTenantsListOKBody tenancy tenants list o k body
+// swagger:model tenancyTenantsListOKBody
+type TenancyTenantsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results TenancyTenantsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this tenancy tenants list o k body
+func (m *TenancyTenantsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *TenancyTenantsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *TenancyTenantsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *TenancyTenantsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *TenancyTenantsListOKBody) UnmarshalBinary(b []byte) error {
+	var res TenancyTenantsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenancy_tenants_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenancy_tenants_list_okbody_results.go
new file mode 100644
index 0000000..6573450
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenancy_tenants_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// TenancyTenantsListOKBodyResults tenancy tenants list o k body results
+// swagger:model tenancyTenantsListOKBodyResults
+type TenancyTenantsListOKBodyResults []*Tenant
+
+// Validate validates this tenancy tenants list o k body results
+func (m TenancyTenantsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenant.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenant.go
new file mode 100644
index 0000000..e3a4446
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenant.go
@@ -0,0 +1,182 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// Tenant tenant
+// swagger:model Tenant
+type Tenant struct {
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Description
+	//
+	// Long-form name (optional)
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// group
+	// Required: true
+	Group *NestedTenantGroup `json:"group"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 30
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this tenant
+func (m *Tenant) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateGroup(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *Tenant) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Tenant) validateGroup(formats strfmt.Registry) error {
+
+	if err := validate.Required("group", "body", m.Group); err != nil {
+		return err
+	}
+
+	if m.Group != nil {
+
+		if err := m.Group.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("group")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *Tenant) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 30); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *Tenant) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *Tenant) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *Tenant) UnmarshalBinary(b []byte) error {
+	var res Tenant
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenant_group.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenant_group.go
new file mode 100644
index 0000000..4ca8b30
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/tenant_group.go
@@ -0,0 +1,116 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// TenantGroup tenant group
+// swagger:model TenantGroup
+type TenantGroup struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this tenant group
+func (m *TenantGroup) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *TenantGroup) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *TenantGroup) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *TenantGroup) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *TenantGroup) UnmarshalBinary(b []byte) error {
+	var res TenantGroup
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/topology_map.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/topology_map.go
new file mode 100644
index 0000000..e338136
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/topology_map.go
@@ -0,0 +1,186 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// TopologyMap topology map
+// swagger:model TopologyMap
+type TopologyMap struct {
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// Device patterns
+	//
+	// Identify devices to include in the diagram using regular expressions, one per line. Each line will result in a new tier of the drawing. Separate multiple regexes within a line using semicolons. Devices will be rendered in the order they are defined.
+	// Required: true
+	DevicePatterns *string `json:"device_patterns"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// site
+	// Required: true
+	Site *NestedSite `json:"site"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this topology map
+func (m *TopologyMap) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDevicePatterns(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSite(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *TopologyMap) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *TopologyMap) validateDevicePatterns(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_patterns", "body", m.DevicePatterns); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *TopologyMap) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *TopologyMap) validateSite(formats strfmt.Registry) error {
+
+	if err := validate.Required("site", "body", m.Site); err != nil {
+		return err
+	}
+
+	if m.Site != nil {
+
+		if err := m.Site.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("site")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *TopologyMap) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *TopologyMap) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *TopologyMap) UnmarshalBinary(b []byte) error {
+	var res TopologyMap
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/user_action.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/user_action.go
new file mode 100644
index 0000000..882b012
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/user_action.go
@@ -0,0 +1,128 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// UserAction user action
+// swagger:model UserAction
+type UserAction struct {
+
+	// action
+	// Required: true
+	Action *UserActionAction `json:"action"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Message
+	Message string `json:"message,omitempty"`
+
+	// Time
+	// Read Only: true
+	Time strfmt.DateTime `json:"time,omitempty"`
+
+	// user
+	// Required: true
+	User *NestedUser `json:"user"`
+}
+
+// Validate validates this user action
+func (m *UserAction) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateAction(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateUser(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *UserAction) validateAction(formats strfmt.Registry) error {
+
+	if err := validate.Required("action", "body", m.Action); err != nil {
+		return err
+	}
+
+	if m.Action != nil {
+
+		if err := m.Action.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("action")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *UserAction) validateUser(formats strfmt.Registry) error {
+
+	if err := validate.Required("user", "body", m.User); err != nil {
+		return err
+	}
+
+	if m.User != nil {
+
+		if err := m.User.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("user")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *UserAction) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *UserAction) UnmarshalBinary(b []byte) error {
+	var res UserAction
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/user_action_action.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/user_action_action.go
new file mode 100644
index 0000000..8679750
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/user_action_action.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// UserActionAction Action
+// swagger:model userActionAction
+type UserActionAction struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this user action action
+func (m *UserActionAction) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *UserActionAction) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *UserActionAction) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *UserActionAction) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *UserActionAction) UnmarshalBinary(b []byte) error {
+	var res UserActionAction
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtual_chassis.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtual_chassis.go
new file mode 100644
index 0000000..be46fe9
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtual_chassis.go
@@ -0,0 +1,115 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// VirtualChassis virtual chassis
+// swagger:model VirtualChassis
+type VirtualChassis struct {
+
+	// Domain
+	// Max Length: 30
+	Domain string `json:"domain,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// master
+	// Required: true
+	Master *NestedDevice `json:"master"`
+}
+
+// Validate validates this virtual chassis
+func (m *VirtualChassis) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDomain(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateMaster(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *VirtualChassis) validateDomain(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Domain) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("domain", "body", string(m.Domain), 30); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VirtualChassis) validateMaster(formats strfmt.Registry) error {
+
+	if err := validate.Required("master", "body", m.Master); err != nil {
+		return err
+	}
+
+	if m.Master != nil {
+
+		if err := m.Master.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("master")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *VirtualChassis) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *VirtualChassis) UnmarshalBinary(b []byte) error {
+	var res VirtualChassis
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtual_machine.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtual_machine.go
new file mode 100644
index 0000000..b850193
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtual_machine.go
@@ -0,0 +1,407 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// VirtualMachine virtual machine
+// swagger:model VirtualMachine
+type VirtualMachine struct {
+
+	// cluster
+	// Required: true
+	Cluster *NestedCluster `json:"cluster"`
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Disk (GB)
+	// Maximum: 2.147483647e+09
+	// Minimum: 0
+	Disk *int64 `json:"disk,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Memory (MB)
+	// Maximum: 2.147483647e+09
+	// Minimum: 0
+	Memory *int64 `json:"memory,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 64
+	Name *string `json:"name"`
+
+	// platform
+	// Required: true
+	Platform *NestedPlatform `json:"platform"`
+
+	// primary ip
+	// Required: true
+	PrimaryIP *VirtualMachineIPAddress `json:"primary_ip"`
+
+	// primary ip4
+	// Required: true
+	PrimaryIp4 *VirtualMachineIPAddress `json:"primary_ip4"`
+
+	// primary ip6
+	// Required: true
+	PrimaryIp6 *VirtualMachineIPAddress `json:"primary_ip6"`
+
+	// role
+	// Required: true
+	Role *NestedDeviceRole `json:"role"`
+
+	// status
+	// Required: true
+	Status *VirtualMachineStatus `json:"status"`
+
+	// tenant
+	// Required: true
+	Tenant *NestedTenant `json:"tenant"`
+
+	// VCPUs
+	// Maximum: 32767
+	// Minimum: 0
+	Vcpus *int64 `json:"vcpus,omitempty"`
+}
+
+// Validate validates this virtual machine
+func (m *VirtualMachine) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCluster(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDisk(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateMemory(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePlatform(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePrimaryIP(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePrimaryIp4(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePrimaryIp6(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRole(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateTenant(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateVcpus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *VirtualMachine) validateCluster(formats strfmt.Registry) error {
+
+	if err := validate.Required("cluster", "body", m.Cluster); err != nil {
+		return err
+	}
+
+	if m.Cluster != nil {
+
+		if err := m.Cluster.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("cluster")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *VirtualMachine) validateDisk(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Disk) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("disk", "body", int64(*m.Disk), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("disk", "body", int64(*m.Disk), 2.147483647e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VirtualMachine) validateMemory(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Memory) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("memory", "body", int64(*m.Memory), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("memory", "body", int64(*m.Memory), 2.147483647e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VirtualMachine) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VirtualMachine) validatePlatform(formats strfmt.Registry) error {
+
+	if err := validate.Required("platform", "body", m.Platform); err != nil {
+		return err
+	}
+
+	if m.Platform != nil {
+
+		if err := m.Platform.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("platform")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *VirtualMachine) validatePrimaryIP(formats strfmt.Registry) error {
+
+	if err := validate.Required("primary_ip", "body", m.PrimaryIP); err != nil {
+		return err
+	}
+
+	if m.PrimaryIP != nil {
+
+		if err := m.PrimaryIP.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("primary_ip")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *VirtualMachine) validatePrimaryIp4(formats strfmt.Registry) error {
+
+	if err := validate.Required("primary_ip4", "body", m.PrimaryIp4); err != nil {
+		return err
+	}
+
+	if m.PrimaryIp4 != nil {
+
+		if err := m.PrimaryIp4.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("primary_ip4")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *VirtualMachine) validatePrimaryIp6(formats strfmt.Registry) error {
+
+	if err := validate.Required("primary_ip6", "body", m.PrimaryIp6); err != nil {
+		return err
+	}
+
+	if m.PrimaryIp6 != nil {
+
+		if err := m.PrimaryIp6.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("primary_ip6")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *VirtualMachine) validateRole(formats strfmt.Registry) error {
+
+	if err := validate.Required("role", "body", m.Role); err != nil {
+		return err
+	}
+
+	if m.Role != nil {
+
+		if err := m.Role.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("role")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *VirtualMachine) validateStatus(formats strfmt.Registry) error {
+
+	if err := validate.Required("status", "body", m.Status); err != nil {
+		return err
+	}
+
+	if m.Status != nil {
+
+		if err := m.Status.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("status")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *VirtualMachine) validateTenant(formats strfmt.Registry) error {
+
+	if err := validate.Required("tenant", "body", m.Tenant); err != nil {
+		return err
+	}
+
+	if m.Tenant != nil {
+
+		if err := m.Tenant.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("tenant")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *VirtualMachine) validateVcpus(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Vcpus) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("vcpus", "body", int64(*m.Vcpus), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("vcpus", "body", int64(*m.Vcpus), 32767, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *VirtualMachine) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *VirtualMachine) UnmarshalBinary(b []byte) error {
+	var res VirtualMachine
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtual_machine_ip_address.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtual_machine_ip_address.go
new file mode 100644
index 0000000..240a8e2
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtual_machine_ip_address.go
@@ -0,0 +1,93 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// VirtualMachineIPAddress Primary ip
+// swagger:model VirtualMachineIPAddress
+type VirtualMachineIPAddress struct {
+
+	// Address
+	//
+	// IPv4 or IPv6 address (with mask)
+	// Required: true
+	Address *string `json:"address"`
+
+	// Family
+	// Read Only: true
+	Family int64 `json:"family,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Url
+	// Read Only: true
+	URL strfmt.URI `json:"url,omitempty"`
+}
+
+// Validate validates this virtual machine IP address
+func (m *VirtualMachineIPAddress) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateAddress(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *VirtualMachineIPAddress) validateAddress(formats strfmt.Registry) error {
+
+	if err := validate.Required("address", "body", m.Address); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *VirtualMachineIPAddress) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *VirtualMachineIPAddress) UnmarshalBinary(b []byte) error {
+	var res VirtualMachineIPAddress
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtual_machine_status.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtual_machine_status.go
new file mode 100644
index 0000000..462fd4f
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtual_machine_status.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// VirtualMachineStatus Status
+// swagger:model virtualMachineStatus
+type VirtualMachineStatus struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this virtual machine status
+func (m *VirtualMachineStatus) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *VirtualMachineStatus) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VirtualMachineStatus) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *VirtualMachineStatus) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *VirtualMachineStatus) UnmarshalBinary(b []byte) error {
+	var res VirtualMachineStatus
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_cluster_groups_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_cluster_groups_list_okbody.go
new file mode 100644
index 0000000..3cb5e60
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_cluster_groups_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// VirtualizationClusterGroupsListOKBody virtualization cluster groups list o k body
+// swagger:model virtualizationClusterGroupsListOKBody
+type VirtualizationClusterGroupsListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results VirtualizationClusterGroupsListOKBodyResults `json:"results"`
+}
+
+// Validate validates this virtualization cluster groups list o k body
+func (m *VirtualizationClusterGroupsListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *VirtualizationClusterGroupsListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VirtualizationClusterGroupsListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *VirtualizationClusterGroupsListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *VirtualizationClusterGroupsListOKBody) UnmarshalBinary(b []byte) error {
+	var res VirtualizationClusterGroupsListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_cluster_groups_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_cluster_groups_list_okbody_results.go
new file mode 100644
index 0000000..8dd968e
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_cluster_groups_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// VirtualizationClusterGroupsListOKBodyResults virtualization cluster groups list o k body results
+// swagger:model virtualizationClusterGroupsListOKBodyResults
+type VirtualizationClusterGroupsListOKBodyResults []*ClusterGroup
+
+// Validate validates this virtualization cluster groups list o k body results
+func (m VirtualizationClusterGroupsListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_cluster_types_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_cluster_types_list_okbody.go
new file mode 100644
index 0000000..96f6528
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_cluster_types_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// VirtualizationClusterTypesListOKBody virtualization cluster types list o k body
+// swagger:model virtualizationClusterTypesListOKBody
+type VirtualizationClusterTypesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results VirtualizationClusterTypesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this virtualization cluster types list o k body
+func (m *VirtualizationClusterTypesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *VirtualizationClusterTypesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VirtualizationClusterTypesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *VirtualizationClusterTypesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *VirtualizationClusterTypesListOKBody) UnmarshalBinary(b []byte) error {
+	var res VirtualizationClusterTypesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_cluster_types_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_cluster_types_list_okbody_results.go
new file mode 100644
index 0000000..aac33c7
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_cluster_types_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// VirtualizationClusterTypesListOKBodyResults virtualization cluster types list o k body results
+// swagger:model virtualizationClusterTypesListOKBodyResults
+type VirtualizationClusterTypesListOKBodyResults []*ClusterType
+
+// Validate validates this virtualization cluster types list o k body results
+func (m VirtualizationClusterTypesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_clusters_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_clusters_list_okbody.go
new file mode 100644
index 0000000..f36c19f
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_clusters_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// VirtualizationClustersListOKBody virtualization clusters list o k body
+// swagger:model virtualizationClustersListOKBody
+type VirtualizationClustersListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results VirtualizationClustersListOKBodyResults `json:"results"`
+}
+
+// Validate validates this virtualization clusters list o k body
+func (m *VirtualizationClustersListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *VirtualizationClustersListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VirtualizationClustersListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *VirtualizationClustersListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *VirtualizationClustersListOKBody) UnmarshalBinary(b []byte) error {
+	var res VirtualizationClustersListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_clusters_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_clusters_list_okbody_results.go
new file mode 100644
index 0000000..f562a93
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_clusters_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// VirtualizationClustersListOKBodyResults virtualization clusters list o k body results
+// swagger:model virtualizationClustersListOKBodyResults
+type VirtualizationClustersListOKBodyResults []*Cluster
+
+// Validate validates this virtualization clusters list o k body results
+func (m VirtualizationClustersListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_interfaces_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_interfaces_list_okbody.go
new file mode 100644
index 0000000..58ed446
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_interfaces_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// VirtualizationInterfacesListOKBody virtualization interfaces list o k body
+// swagger:model virtualizationInterfacesListOKBody
+type VirtualizationInterfacesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results VirtualizationInterfacesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this virtualization interfaces list o k body
+func (m *VirtualizationInterfacesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *VirtualizationInterfacesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VirtualizationInterfacesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *VirtualizationInterfacesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *VirtualizationInterfacesListOKBody) UnmarshalBinary(b []byte) error {
+	var res VirtualizationInterfacesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_interfaces_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_interfaces_list_okbody_results.go
new file mode 100644
index 0000000..7974f6a
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_interfaces_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// VirtualizationInterfacesListOKBodyResults virtualization interfaces list o k body results
+// swagger:model virtualizationInterfacesListOKBodyResults
+type VirtualizationInterfacesListOKBodyResults []*Interface
+
+// Validate validates this virtualization interfaces list o k body results
+func (m VirtualizationInterfacesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_virtual_machines_list_okbody.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_virtual_machines_list_okbody.go
new file mode 100644
index 0000000..18fa88b
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_virtual_machines_list_okbody.go
@@ -0,0 +1,110 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// VirtualizationVirtualMachinesListOKBody virtualization virtual machines list o k body
+// swagger:model virtualizationVirtualMachinesListOKBody
+type VirtualizationVirtualMachinesListOKBody struct {
+
+	// count
+	// Required: true
+	Count *int64 `json:"count"`
+
+	// next
+	Next *strfmt.URI `json:"next,omitempty"`
+
+	// previous
+	Previous *strfmt.URI `json:"previous,omitempty"`
+
+	// results
+	// Required: true
+	Results VirtualizationVirtualMachinesListOKBodyResults `json:"results"`
+}
+
+// Validate validates this virtualization virtual machines list o k body
+func (m *VirtualizationVirtualMachinesListOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateResults(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *VirtualizationVirtualMachinesListOKBody) validateCount(formats strfmt.Registry) error {
+
+	if err := validate.Required("count", "body", m.Count); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VirtualizationVirtualMachinesListOKBody) validateResults(formats strfmt.Registry) error {
+
+	if err := validate.Required("results", "body", m.Results); err != nil {
+		return err
+	}
+
+	if err := m.Results.Validate(formats); err != nil {
+		if ve, ok := err.(*errors.Validation); ok {
+			return ve.ValidateName("results")
+		}
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *VirtualizationVirtualMachinesListOKBody) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *VirtualizationVirtualMachinesListOKBody) UnmarshalBinary(b []byte) error {
+	var res VirtualizationVirtualMachinesListOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_virtual_machines_list_okbody_results.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_virtual_machines_list_okbody_results.go
new file mode 100644
index 0000000..874c63a
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/virtualization_virtual_machines_list_okbody_results.go
@@ -0,0 +1,61 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+)
+
+// VirtualizationVirtualMachinesListOKBodyResults virtualization virtual machines list o k body results
+// swagger:model virtualizationVirtualMachinesListOKBodyResults
+type VirtualizationVirtualMachinesListOKBodyResults []*VirtualMachine
+
+// Validate validates this virtualization virtual machines list o k body results
+func (m VirtualizationVirtualMachinesListOKBodyResults) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	for i := 0; i < len(m); i++ {
+
+		if swag.IsZero(m[i]) { // not required
+			continue
+		}
+
+		if m[i] != nil {
+
+			if err := m[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName(strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/vlan.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/vlan.go
new file mode 100644
index 0000000..b12091a
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/vlan.go
@@ -0,0 +1,293 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// VLAN v l a n
+// swagger:model VLAN
+type VLAN struct {
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// Display name
+	// Read Only: true
+	DisplayName string `json:"display_name,omitempty"`
+
+	// group
+	// Required: true
+	Group *NestedVLANGroup `json:"group"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 64
+	Name *string `json:"name"`
+
+	// role
+	// Required: true
+	Role *NestedRole `json:"role"`
+
+	// site
+	// Required: true
+	Site *NestedSite `json:"site"`
+
+	// status
+	// Required: true
+	Status *VLANStatus `json:"status"`
+
+	// tenant
+	// Required: true
+	Tenant *NestedTenant `json:"tenant"`
+
+	// ID
+	// Required: true
+	// Maximum: 4094
+	// Minimum: 1
+	Vid *int64 `json:"vid"`
+}
+
+// Validate validates this v l a n
+func (m *VLAN) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateGroup(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRole(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSite(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateTenant(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateVid(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *VLAN) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VLAN) validateGroup(formats strfmt.Registry) error {
+
+	if err := validate.Required("group", "body", m.Group); err != nil {
+		return err
+	}
+
+	if m.Group != nil {
+
+		if err := m.Group.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("group")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *VLAN) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VLAN) validateRole(formats strfmt.Registry) error {
+
+	if err := validate.Required("role", "body", m.Role); err != nil {
+		return err
+	}
+
+	if m.Role != nil {
+
+		if err := m.Role.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("role")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *VLAN) validateSite(formats strfmt.Registry) error {
+
+	if err := validate.Required("site", "body", m.Site); err != nil {
+		return err
+	}
+
+	if m.Site != nil {
+
+		if err := m.Site.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("site")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *VLAN) validateStatus(formats strfmt.Registry) error {
+
+	if err := validate.Required("status", "body", m.Status); err != nil {
+		return err
+	}
+
+	if m.Status != nil {
+
+		if err := m.Status.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("status")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *VLAN) validateTenant(formats strfmt.Registry) error {
+
+	if err := validate.Required("tenant", "body", m.Tenant); err != nil {
+		return err
+	}
+
+	if m.Tenant != nil {
+
+		if err := m.Tenant.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("tenant")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *VLAN) validateVid(formats strfmt.Registry) error {
+
+	if err := validate.Required("vid", "body", m.Vid); err != nil {
+		return err
+	}
+
+	if err := validate.MinimumInt("vid", "body", int64(*m.Vid), 1, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("vid", "body", int64(*m.Vid), 4094, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *VLAN) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *VLAN) UnmarshalBinary(b []byte) error {
+	var res VLAN
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/vlangroup.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/vlangroup.go
new file mode 100644
index 0000000..8014aaf
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/vlangroup.go
@@ -0,0 +1,144 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// VLANGroup v l a n group
+// swagger:model VLANGroup
+type VLANGroup struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// site
+	// Required: true
+	Site *NestedSite `json:"site"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this v l a n group
+func (m *VLANGroup) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSite(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *VLANGroup) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VLANGroup) validateSite(formats strfmt.Registry) error {
+
+	if err := validate.Required("site", "body", m.Site); err != nil {
+		return err
+	}
+
+	if m.Site != nil {
+
+		if err := m.Site.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("site")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *VLANGroup) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *VLANGroup) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *VLANGroup) UnmarshalBinary(b []byte) error {
+	var res VLANGroup
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/vlanstatus.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/vlanstatus.go
new file mode 100644
index 0000000..46466c2
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/vlanstatus.go
@@ -0,0 +1,97 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// VLANStatus Status
+// swagger:model vLANStatus
+type VLANStatus struct {
+
+	// label
+	// Required: true
+	Label *string `json:"label"`
+
+	// value
+	// Required: true
+	Value *int64 `json:"value"`
+}
+
+// Validate validates this v l a n status
+func (m *VLANStatus) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLabel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateValue(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *VLANStatus) validateLabel(formats strfmt.Registry) error {
+
+	if err := validate.Required("label", "body", m.Label); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VLANStatus) validateValue(formats strfmt.Registry) error {
+
+	if err := validate.Required("value", "body", m.Value); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *VLANStatus) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *VLANStatus) UnmarshalBinary(b []byte) error {
+	var res VLANStatus
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/vrf.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/vrf.go
new file mode 100644
index 0000000..d172ea0
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/vrf.go
@@ -0,0 +1,181 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// VRF v r f
+// swagger:model VRF
+type VRF struct {
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// Display name
+	// Read Only: true
+	DisplayName string `json:"display_name,omitempty"`
+
+	// Enforce unique space
+	//
+	// Prevent duplicate prefixes/IP addresses within this VRF
+	EnforceUnique bool `json:"enforce_unique,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Route distinguisher
+	// Required: true
+	// Max Length: 21
+	Rd *string `json:"rd"`
+
+	// tenant
+	// Required: true
+	Tenant *NestedTenant `json:"tenant"`
+}
+
+// Validate validates this v r f
+func (m *VRF) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRd(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateTenant(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *VRF) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VRF) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VRF) validateRd(formats strfmt.Registry) error {
+
+	if err := validate.Required("rd", "body", m.Rd); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("rd", "body", string(*m.Rd), 21); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *VRF) validateTenant(formats strfmt.Registry) error {
+
+	if err := validate.Required("tenant", "body", m.Tenant); err != nil {
+		return err
+	}
+
+	if m.Tenant != nil {
+
+		if err := m.Tenant.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("tenant")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *VRF) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *VRF) UnmarshalBinary(b []byte) error {
+	var res VRF
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_aggregate.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_aggregate.go
new file mode 100644
index 0000000..7f2de13
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_aggregate.go
@@ -0,0 +1,137 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableAggregate writable aggregate
+// swagger:model WritableAggregate
+type WritableAggregate struct {
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Date added
+	DateAdded strfmt.Date `json:"date_added,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Prefix
+	// Required: true
+	Prefix *string `json:"prefix"`
+
+	// RIR
+	// Required: true
+	Rir *int64 `json:"rir"`
+}
+
+// Validate validates this writable aggregate
+func (m *WritableAggregate) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePrefix(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRir(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableAggregate) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableAggregate) validatePrefix(formats strfmt.Registry) error {
+
+	if err := validate.Required("prefix", "body", m.Prefix); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableAggregate) validateRir(formats strfmt.Registry) error {
+
+	if err := validate.Required("rir", "body", m.Rir); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableAggregate) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableAggregate) UnmarshalBinary(b []byte) error {
+	var res WritableAggregate
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_circuit.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_circuit.go
new file mode 100644
index 0000000..d0a92cc
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_circuit.go
@@ -0,0 +1,237 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableCircuit writable circuit
+// swagger:model WritableCircuit
+type WritableCircuit struct {
+
+	// Circuit ID
+	// Required: true
+	// Max Length: 50
+	Cid *string `json:"cid"`
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Commit rate (Kbps)
+	// Maximum: 2.147483647e+09
+	// Minimum: 0
+	CommitRate *int64 `json:"commit_rate,omitempty"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Date installed
+	InstallDate strfmt.Date `json:"install_date,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Provider
+	// Required: true
+	Provider *int64 `json:"provider"`
+
+	// Status
+	Status int64 `json:"status,omitempty"`
+
+	// Tenant
+	Tenant int64 `json:"tenant,omitempty"`
+
+	// Type
+	// Required: true
+	Type *int64 `json:"type"`
+}
+
+// Validate validates this writable circuit
+func (m *WritableCircuit) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCid(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateCommitRate(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateProvider(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableCircuit) validateCid(formats strfmt.Registry) error {
+
+	if err := validate.Required("cid", "body", m.Cid); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("cid", "body", string(*m.Cid), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableCircuit) validateCommitRate(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.CommitRate) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("commit_rate", "body", int64(*m.CommitRate), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("commit_rate", "body", int64(*m.CommitRate), 2.147483647e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableCircuit) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableCircuit) validateProvider(formats strfmt.Registry) error {
+
+	if err := validate.Required("provider", "body", m.Provider); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableCircuitTypeStatusPropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[2,3,1,4,0,5]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableCircuitTypeStatusPropEnum = append(writableCircuitTypeStatusPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableCircuit) validateStatusEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writableCircuitTypeStatusPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableCircuit) validateStatus(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Status) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateStatusEnum("status", "body", m.Status); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableCircuit) validateType(formats strfmt.Registry) error {
+
+	if err := validate.Required("type", "body", m.Type); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableCircuit) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableCircuit) UnmarshalBinary(b []byte) error {
+	var res WritableCircuit
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_circuit_termination.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_circuit_termination.go
new file mode 100644
index 0000000..cb837e4
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_circuit_termination.go
@@ -0,0 +1,257 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableCircuitTermination writable circuit termination
+// swagger:model WritableCircuitTermination
+type WritableCircuitTermination struct {
+
+	// Circuit
+	// Required: true
+	Circuit *int64 `json:"circuit"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Interface
+	Interface int64 `json:"interface,omitempty"`
+
+	// Port speed (Kbps)
+	// Required: true
+	// Maximum: 2.147483647e+09
+	// Minimum: 0
+	PortSpeed *int64 `json:"port_speed"`
+
+	// Patch panel/port(s)
+	// Max Length: 100
+	PpInfo string `json:"pp_info,omitempty"`
+
+	// Site
+	// Required: true
+	Site *int64 `json:"site"`
+
+	// Termination
+	// Required: true
+	TermSide *string `json:"term_side"`
+
+	// Upstream speed (Kbps)
+	//
+	// Upstream speed, if different from port speed
+	// Maximum: 2.147483647e+09
+	// Minimum: 0
+	UpstreamSpeed *int64 `json:"upstream_speed,omitempty"`
+
+	// Cross-connect ID
+	// Max Length: 50
+	XconnectID string `json:"xconnect_id,omitempty"`
+}
+
+// Validate validates this writable circuit termination
+func (m *WritableCircuitTermination) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCircuit(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePortSpeed(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePpInfo(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSite(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateTermSide(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateUpstreamSpeed(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateXconnectID(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableCircuitTermination) validateCircuit(formats strfmt.Registry) error {
+
+	if err := validate.Required("circuit", "body", m.Circuit); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableCircuitTermination) validatePortSpeed(formats strfmt.Registry) error {
+
+	if err := validate.Required("port_speed", "body", m.PortSpeed); err != nil {
+		return err
+	}
+
+	if err := validate.MinimumInt("port_speed", "body", int64(*m.PortSpeed), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("port_speed", "body", int64(*m.PortSpeed), 2.147483647e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableCircuitTermination) validatePpInfo(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.PpInfo) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("pp_info", "body", string(m.PpInfo), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableCircuitTermination) validateSite(formats strfmt.Registry) error {
+
+	if err := validate.Required("site", "body", m.Site); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableCircuitTerminationTypeTermSidePropEnum []interface{}
+
+func init() {
+	var res []string
+	if err := json.Unmarshal([]byte(`["A","Z"]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableCircuitTerminationTypeTermSidePropEnum = append(writableCircuitTerminationTypeTermSidePropEnum, v)
+	}
+}
+
+const (
+	// WritableCircuitTerminationTermSideA captures enum value "A"
+	WritableCircuitTerminationTermSideA string = "A"
+	// WritableCircuitTerminationTermSideZ captures enum value "Z"
+	WritableCircuitTerminationTermSideZ string = "Z"
+)
+
+// prop value enum
+func (m *WritableCircuitTermination) validateTermSideEnum(path, location string, value string) error {
+	if err := validate.Enum(path, location, value, writableCircuitTerminationTypeTermSidePropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableCircuitTermination) validateTermSide(formats strfmt.Registry) error {
+
+	if err := validate.Required("term_side", "body", m.TermSide); err != nil {
+		return err
+	}
+
+	// value enum
+	if err := m.validateTermSideEnum("term_side", "body", *m.TermSide); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableCircuitTermination) validateUpstreamSpeed(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.UpstreamSpeed) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("upstream_speed", "body", int64(*m.UpstreamSpeed), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("upstream_speed", "body", int64(*m.UpstreamSpeed), 2.147483647e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableCircuitTermination) validateXconnectID(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.XconnectID) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("xconnect_id", "body", string(m.XconnectID), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableCircuitTermination) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableCircuitTermination) UnmarshalBinary(b []byte) error {
+	var res WritableCircuitTermination
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_cluster.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_cluster.go
new file mode 100644
index 0000000..03f05b6
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_cluster.go
@@ -0,0 +1,126 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableCluster writable cluster
+// swagger:model WritableCluster
+type WritableCluster struct {
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Group
+	Group int64 `json:"group,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 100
+	Name *string `json:"name"`
+
+	// Site
+	Site int64 `json:"site,omitempty"`
+
+	// Type
+	// Required: true
+	Type *int64 `json:"type"`
+}
+
+// Validate validates this writable cluster
+func (m *WritableCluster) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableCluster) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableCluster) validateType(formats strfmt.Registry) error {
+
+	if err := validate.Required("type", "body", m.Type); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableCluster) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableCluster) UnmarshalBinary(b []byte) error {
+	var res WritableCluster
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_console_port.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_console_port.go
new file mode 100644
index 0000000..4c27c85
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_console_port.go
@@ -0,0 +1,153 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableConsolePort writable console port
+// swagger:model WritableConsolePort
+type WritableConsolePort struct {
+
+	// Connection status
+	ConnectionStatus bool `json:"connection_status,omitempty"`
+
+	// Console server port
+	CsPort int64 `json:"cs_port,omitempty"`
+
+	// Device
+	// Required: true
+	Device *int64 `json:"device"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this writable console port
+func (m *WritableConsolePort) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateConnectionStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+var writableConsolePortTypeConnectionStatusPropEnum []interface{}
+
+func init() {
+	var res []bool
+	if err := json.Unmarshal([]byte(`[false,true]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableConsolePortTypeConnectionStatusPropEnum = append(writableConsolePortTypeConnectionStatusPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableConsolePort) validateConnectionStatusEnum(path, location string, value bool) error {
+	if err := validate.Enum(path, location, value, writableConsolePortTypeConnectionStatusPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableConsolePort) validateConnectionStatus(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.ConnectionStatus) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateConnectionStatusEnum("connection_status", "body", m.ConnectionStatus); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableConsolePort) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableConsolePort) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableConsolePort) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableConsolePort) UnmarshalBinary(b []byte) error {
+	var res WritableConsolePort
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_console_port_template.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_console_port_template.go
new file mode 100644
index 0000000..ec34e44
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_console_port_template.go
@@ -0,0 +1,106 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableConsolePortTemplate writable console port template
+// swagger:model WritableConsolePortTemplate
+type WritableConsolePortTemplate struct {
+
+	// Device type
+	// Required: true
+	DeviceType *int64 `json:"device_type"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this writable console port template
+func (m *WritableConsolePortTemplate) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDeviceType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableConsolePortTemplate) validateDeviceType(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_type", "body", m.DeviceType); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableConsolePortTemplate) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableConsolePortTemplate) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableConsolePortTemplate) UnmarshalBinary(b []byte) error {
+	var res WritableConsolePortTemplate
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_console_server_port.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_console_server_port.go
new file mode 100644
index 0000000..d060976
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_console_server_port.go
@@ -0,0 +1,106 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableConsoleServerPort writable console server port
+// swagger:model WritableConsoleServerPort
+type WritableConsoleServerPort struct {
+
+	// Device
+	// Required: true
+	Device *int64 `json:"device"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this writable console server port
+func (m *WritableConsoleServerPort) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableConsoleServerPort) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableConsoleServerPort) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableConsoleServerPort) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableConsoleServerPort) UnmarshalBinary(b []byte) error {
+	var res WritableConsoleServerPort
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_console_server_port_template.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_console_server_port_template.go
new file mode 100644
index 0000000..35e16a1
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_console_server_port_template.go
@@ -0,0 +1,106 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableConsoleServerPortTemplate writable console server port template
+// swagger:model WritableConsoleServerPortTemplate
+type WritableConsoleServerPortTemplate struct {
+
+	// Device type
+	// Required: true
+	DeviceType *int64 `json:"device_type"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this writable console server port template
+func (m *WritableConsoleServerPortTemplate) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDeviceType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableConsoleServerPortTemplate) validateDeviceType(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_type", "body", m.DeviceType); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableConsoleServerPortTemplate) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableConsoleServerPortTemplate) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableConsoleServerPortTemplate) UnmarshalBinary(b []byte) error {
+	var res WritableConsoleServerPortTemplate
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_device.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_device.go
new file mode 100644
index 0000000..a047d77
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_device.go
@@ -0,0 +1,391 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableDevice writable device
+// swagger:model WritableDevice
+type WritableDevice struct {
+
+	// Asset tag
+	//
+	// A unique tag used to identify this device
+	// Max Length: 50
+	AssetTag string `json:"asset_tag,omitempty"`
+
+	// Cluster
+	Cluster int64 `json:"cluster,omitempty"`
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Device role
+	// Required: true
+	DeviceRole *int64 `json:"device_role"`
+
+	// Device type
+	// Required: true
+	DeviceType *int64 `json:"device_type"`
+
+	// Rack face
+	Face int64 `json:"face,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Max Length: 64
+	Name string `json:"name,omitempty"`
+
+	// Platform
+	Platform int64 `json:"platform,omitempty"`
+
+	// Position (U)
+	//
+	// The lowest-numbered unit occupied by the device
+	// Maximum: 32767
+	// Minimum: 1
+	Position int64 `json:"position,omitempty"`
+
+	// Primary IPv4
+	PrimaryIp4 int64 `json:"primary_ip4,omitempty"`
+
+	// Primary IPv6
+	PrimaryIp6 int64 `json:"primary_ip6,omitempty"`
+
+	// Rack
+	Rack int64 `json:"rack,omitempty"`
+
+	// Serial number
+	// Max Length: 50
+	Serial string `json:"serial,omitempty"`
+
+	// Site
+	// Required: true
+	Site *int64 `json:"site"`
+
+	// Status
+	Status int64 `json:"status,omitempty"`
+
+	// Tenant
+	Tenant int64 `json:"tenant,omitempty"`
+
+	// Vc position
+	// Maximum: 255
+	// Minimum: 0
+	VcPosition *int64 `json:"vc_position,omitempty"`
+
+	// Vc priority
+	// Maximum: 255
+	// Minimum: 0
+	VcPriority *int64 `json:"vc_priority,omitempty"`
+
+	// Virtual chassis
+	VirtualChassis int64 `json:"virtual_chassis,omitempty"`
+}
+
+// Validate validates this writable device
+func (m *WritableDevice) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateAssetTag(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDeviceRole(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDeviceType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateFace(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePosition(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSerial(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSite(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateVcPosition(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateVcPriority(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableDevice) validateAssetTag(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.AssetTag) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("asset_tag", "body", string(m.AssetTag), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableDevice) validateDeviceRole(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_role", "body", m.DeviceRole); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableDevice) validateDeviceType(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_type", "body", m.DeviceType); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableDeviceTypeFacePropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[0,1]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableDeviceTypeFacePropEnum = append(writableDeviceTypeFacePropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableDevice) validateFaceEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writableDeviceTypeFacePropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableDevice) validateFace(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Face) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateFaceEnum("face", "body", m.Face); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableDevice) validateName(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Name) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("name", "body", string(m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableDevice) validatePosition(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Position) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("position", "body", int64(m.Position), 1, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("position", "body", int64(m.Position), 32767, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableDevice) validateSerial(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Serial) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("serial", "body", string(m.Serial), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableDevice) validateSite(formats strfmt.Registry) error {
+
+	if err := validate.Required("site", "body", m.Site); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableDeviceTypeStatusPropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[1,0,2,3,4,5]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableDeviceTypeStatusPropEnum = append(writableDeviceTypeStatusPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableDevice) validateStatusEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writableDeviceTypeStatusPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableDevice) validateStatus(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Status) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateStatusEnum("status", "body", m.Status); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableDevice) validateVcPosition(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.VcPosition) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("vc_position", "body", int64(*m.VcPosition), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("vc_position", "body", int64(*m.VcPosition), 255, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableDevice) validateVcPriority(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.VcPriority) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("vc_priority", "body", int64(*m.VcPriority), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("vc_priority", "body", int64(*m.VcPriority), 255, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableDevice) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableDevice) UnmarshalBinary(b []byte) error {
+	var res WritableDevice
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_device_bay.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_device_bay.go
new file mode 100644
index 0000000..e1caaee
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_device_bay.go
@@ -0,0 +1,109 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableDeviceBay writable device bay
+// swagger:model WritableDeviceBay
+type WritableDeviceBay struct {
+
+	// Device
+	// Required: true
+	Device *int64 `json:"device"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Installed device
+	InstalledDevice int64 `json:"installed_device,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this writable device bay
+func (m *WritableDeviceBay) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableDeviceBay) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableDeviceBay) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableDeviceBay) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableDeviceBay) UnmarshalBinary(b []byte) error {
+	var res WritableDeviceBay
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_device_bay_template.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_device_bay_template.go
new file mode 100644
index 0000000..65148be
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_device_bay_template.go
@@ -0,0 +1,106 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableDeviceBayTemplate writable device bay template
+// swagger:model WritableDeviceBayTemplate
+type WritableDeviceBayTemplate struct {
+
+	// Device type
+	// Required: true
+	DeviceType *int64 `json:"device_type"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this writable device bay template
+func (m *WritableDeviceBayTemplate) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDeviceType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableDeviceBayTemplate) validateDeviceType(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_type", "body", m.DeviceType); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableDeviceBayTemplate) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableDeviceBayTemplate) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableDeviceBayTemplate) UnmarshalBinary(b []byte) error {
+	var res WritableDeviceBayTemplate
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_device_type.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_device_type.go
new file mode 100644
index 0000000..68d1c69
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_device_type.go
@@ -0,0 +1,299 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableDeviceType writable device type
+// swagger:model WritableDeviceType
+type WritableDeviceType struct {
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Interface ordering
+	InterfaceOrdering int64 `json:"interface_ordering,omitempty"`
+
+	// Is a console server
+	//
+	// This type of device has console server ports
+	IsConsoleServer bool `json:"is_console_server,omitempty"`
+
+	// Is full depth
+	//
+	// Device consumes both front and rear rack faces
+	IsFullDepth bool `json:"is_full_depth,omitempty"`
+
+	// Is a network device
+	//
+	// This type of device has network interfaces
+	IsNetworkDevice bool `json:"is_network_device,omitempty"`
+
+	// Is a PDU
+	//
+	// This type of device has power outlets
+	IsPdu bool `json:"is_pdu,omitempty"`
+
+	// Manufacturer
+	// Required: true
+	Manufacturer *int64 `json:"manufacturer"`
+
+	// Model
+	// Required: true
+	// Max Length: 50
+	Model *string `json:"model"`
+
+	// Part number
+	//
+	// Discrete part number (optional)
+	// Max Length: 50
+	PartNumber string `json:"part_number,omitempty"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Parent/child status
+	//
+	// Parent devices house child devices in device bays. Select "None" if this device type is neither a parent nor a child.
+	SubdeviceRole *bool `json:"subdevice_role,omitempty"`
+
+	// Height (U)
+	// Maximum: 32767
+	// Minimum: 0
+	UHeight *int64 `json:"u_height,omitempty"`
+}
+
+// Validate validates this writable device type
+func (m *WritableDeviceType) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateInterfaceOrdering(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateManufacturer(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateModel(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePartNumber(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSubdeviceRole(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateUHeight(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+var writableDeviceTypeTypeInterfaceOrderingPropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[1,2]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableDeviceTypeTypeInterfaceOrderingPropEnum = append(writableDeviceTypeTypeInterfaceOrderingPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableDeviceType) validateInterfaceOrderingEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writableDeviceTypeTypeInterfaceOrderingPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableDeviceType) validateInterfaceOrdering(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.InterfaceOrdering) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateInterfaceOrderingEnum("interface_ordering", "body", m.InterfaceOrdering); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableDeviceType) validateManufacturer(formats strfmt.Registry) error {
+
+	if err := validate.Required("manufacturer", "body", m.Manufacturer); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableDeviceType) validateModel(formats strfmt.Registry) error {
+
+	if err := validate.Required("model", "body", m.Model); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("model", "body", string(*m.Model), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableDeviceType) validatePartNumber(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.PartNumber) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("part_number", "body", string(m.PartNumber), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableDeviceType) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableDeviceTypeTypeSubdeviceRolePropEnum []interface{}
+
+func init() {
+	var res []bool
+	if err := json.Unmarshal([]byte(`[null,true,false]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableDeviceTypeTypeSubdeviceRolePropEnum = append(writableDeviceTypeTypeSubdeviceRolePropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableDeviceType) validateSubdeviceRoleEnum(path, location string, value bool) error {
+	if err := validate.Enum(path, location, value, writableDeviceTypeTypeSubdeviceRolePropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableDeviceType) validateSubdeviceRole(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.SubdeviceRole) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateSubdeviceRoleEnum("subdevice_role", "body", *m.SubdeviceRole); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableDeviceType) validateUHeight(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.UHeight) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("u_height", "body", int64(*m.UHeight), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("u_height", "body", int64(*m.UHeight), 32767, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableDeviceType) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableDeviceType) UnmarshalBinary(b []byte) error {
+	var res WritableDeviceType
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_graph.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_graph.go
new file mode 100644
index 0000000..a986362
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_graph.go
@@ -0,0 +1,209 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableGraph writable graph
+// swagger:model WritableGraph
+type WritableGraph struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Link URL
+	// Max Length: 200
+	Link strfmt.URI `json:"link,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 100
+	Name *string `json:"name"`
+
+	// Source URL
+	// Required: true
+	// Max Length: 500
+	Source *string `json:"source"`
+
+	// Type
+	// Required: true
+	Type *int64 `json:"type"`
+
+	// Weight
+	// Maximum: 32767
+	// Minimum: 0
+	Weight *int64 `json:"weight,omitempty"`
+}
+
+// Validate validates this writable graph
+func (m *WritableGraph) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateLink(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSource(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateWeight(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableGraph) validateLink(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Link) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("link", "body", string(m.Link), 200); err != nil {
+		return err
+	}
+
+	if err := validate.FormatOf("link", "body", "uri", m.Link.String(), formats); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableGraph) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableGraph) validateSource(formats strfmt.Registry) error {
+
+	if err := validate.Required("source", "body", m.Source); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("source", "body", string(*m.Source), 500); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableGraphTypeTypePropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[100,200,300]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableGraphTypeTypePropEnum = append(writableGraphTypeTypePropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableGraph) validateTypeEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writableGraphTypeTypePropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableGraph) validateType(formats strfmt.Registry) error {
+
+	if err := validate.Required("type", "body", m.Type); err != nil {
+		return err
+	}
+
+	// value enum
+	if err := m.validateTypeEnum("type", "body", *m.Type); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableGraph) validateWeight(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Weight) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("weight", "body", int64(*m.Weight), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("weight", "body", int64(*m.Weight), 32767, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableGraph) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableGraph) UnmarshalBinary(b []byte) error {
+	var res WritableGraph
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_image_attachment.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_image_attachment.go
new file mode 100644
index 0000000..a2b0778
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_image_attachment.go
@@ -0,0 +1,156 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableImageAttachment writable image attachment
+// swagger:model WritableImageAttachment
+type WritableImageAttachment struct {
+
+	// Content type
+	// Required: true
+	ContentType *string `json:"content_type"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Image
+	// Required: true
+	// Read Only: true
+	Image strfmt.URI `json:"image"`
+
+	// Name
+	// Max Length: 50
+	Name string `json:"name,omitempty"`
+
+	// Object id
+	// Required: true
+	// Maximum: 2.147483647e+09
+	// Minimum: 0
+	ObjectID *int64 `json:"object_id"`
+}
+
+// Validate validates this writable image attachment
+func (m *WritableImageAttachment) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateContentType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateImage(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateObjectID(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableImageAttachment) validateContentType(formats strfmt.Registry) error {
+
+	if err := validate.Required("content_type", "body", m.ContentType); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableImageAttachment) validateImage(formats strfmt.Registry) error {
+
+	if err := validate.Required("image", "body", strfmt.URI(m.Image)); err != nil {
+		return err
+	}
+
+	if err := validate.FormatOf("image", "body", "uri", m.Image.String(), formats); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableImageAttachment) validateName(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Name) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("name", "body", string(m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableImageAttachment) validateObjectID(formats strfmt.Registry) error {
+
+	if err := validate.Required("object_id", "body", m.ObjectID); err != nil {
+		return err
+	}
+
+	if err := validate.MinimumInt("object_id", "body", int64(*m.ObjectID), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("object_id", "body", int64(*m.ObjectID), 2.147483647e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableImageAttachment) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableImageAttachment) UnmarshalBinary(b []byte) error {
+	var res WritableImageAttachment
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_interface.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_interface.go
new file mode 100644
index 0000000..caa972f
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_interface.go
@@ -0,0 +1,280 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableInterface writable interface
+// swagger:model WritableInterface
+type WritableInterface struct {
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// Device
+	// Required: true
+	Device *int64 `json:"device"`
+
+	// Enabled
+	Enabled bool `json:"enabled,omitempty"`
+
+	// Form factor
+	FormFactor int64 `json:"form_factor,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Parent LAG
+	Lag int64 `json:"lag,omitempty"`
+
+	// MAC Address
+	MacAddress string `json:"mac_address,omitempty"`
+
+	// OOB Management
+	//
+	// This interface is used only for out-of-band management
+	MgmtOnly bool `json:"mgmt_only,omitempty"`
+
+	// Mode
+	Mode int64 `json:"mode,omitempty"`
+
+	// MTU
+	// Maximum: 32767
+	// Minimum: 0
+	Mtu *int64 `json:"mtu,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 64
+	Name *string `json:"name"`
+
+	// tagged vlans
+	// Unique: true
+	TaggedVlans []int64 `json:"tagged_vlans"`
+
+	// Untagged VLAN
+	UntaggedVlan int64 `json:"untagged_vlan,omitempty"`
+}
+
+// Validate validates this writable interface
+func (m *WritableInterface) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateFormFactor(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateMode(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateMtu(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateTaggedVlans(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableInterface) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableInterface) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableInterfaceTypeFormFactorPropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[0,200,800,1000,1150,1170,1050,1100,1200,1300,1310,1320,1350,1400,1500,1510,1520,1550,1600,2600,2610,2620,2630,2640,3010,3020,3040,3080,3160,4000,4010,4040,4050,5000,5050,5100,5150,5200,32767]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableInterfaceTypeFormFactorPropEnum = append(writableInterfaceTypeFormFactorPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableInterface) validateFormFactorEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writableInterfaceTypeFormFactorPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableInterface) validateFormFactor(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.FormFactor) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateFormFactorEnum("form_factor", "body", m.FormFactor); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableInterfaceTypeModePropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[100,200,300]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableInterfaceTypeModePropEnum = append(writableInterfaceTypeModePropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableInterface) validateModeEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writableInterfaceTypeModePropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableInterface) validateMode(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Mode) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateModeEnum("mode", "body", m.Mode); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableInterface) validateMtu(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Mtu) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("mtu", "body", int64(*m.Mtu), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("mtu", "body", int64(*m.Mtu), 32767, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableInterface) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableInterface) validateTaggedVlans(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.TaggedVlans) { // not required
+		return nil
+	}
+
+	if err := validate.UniqueItems("tagged_vlans", "body", m.TaggedVlans); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableInterface) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableInterface) UnmarshalBinary(b []byte) error {
+	var res WritableInterface
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_interface_connection.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_interface_connection.go
new file mode 100644
index 0000000..c650520
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_interface_connection.go
@@ -0,0 +1,145 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableInterfaceConnection writable interface connection
+// swagger:model WritableInterfaceConnection
+type WritableInterfaceConnection struct {
+
+	// Status
+	ConnectionStatus bool `json:"connection_status,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Interface a
+	// Required: true
+	InterfaceA *int64 `json:"interface_a"`
+
+	// Interface b
+	// Required: true
+	InterfaceB *int64 `json:"interface_b"`
+}
+
+// Validate validates this writable interface connection
+func (m *WritableInterfaceConnection) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateConnectionStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateInterfaceA(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateInterfaceB(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+var writableInterfaceConnectionTypeConnectionStatusPropEnum []interface{}
+
+func init() {
+	var res []bool
+	if err := json.Unmarshal([]byte(`[false,true]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableInterfaceConnectionTypeConnectionStatusPropEnum = append(writableInterfaceConnectionTypeConnectionStatusPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableInterfaceConnection) validateConnectionStatusEnum(path, location string, value bool) error {
+	if err := validate.Enum(path, location, value, writableInterfaceConnectionTypeConnectionStatusPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableInterfaceConnection) validateConnectionStatus(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.ConnectionStatus) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateConnectionStatusEnum("connection_status", "body", m.ConnectionStatus); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableInterfaceConnection) validateInterfaceA(formats strfmt.Registry) error {
+
+	if err := validate.Required("interface_a", "body", m.InterfaceA); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableInterfaceConnection) validateInterfaceB(formats strfmt.Registry) error {
+
+	if err := validate.Required("interface_b", "body", m.InterfaceB); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableInterfaceConnection) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableInterfaceConnection) UnmarshalBinary(b []byte) error {
+	var res WritableInterfaceConnection
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_interface_template.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_interface_template.go
new file mode 100644
index 0000000..2471de6
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_interface_template.go
@@ -0,0 +1,153 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableInterfaceTemplate writable interface template
+// swagger:model WritableInterfaceTemplate
+type WritableInterfaceTemplate struct {
+
+	// Device type
+	// Required: true
+	DeviceType *int64 `json:"device_type"`
+
+	// Form factor
+	FormFactor int64 `json:"form_factor,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Management only
+	MgmtOnly bool `json:"mgmt_only,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 64
+	Name *string `json:"name"`
+}
+
+// Validate validates this writable interface template
+func (m *WritableInterfaceTemplate) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDeviceType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateFormFactor(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableInterfaceTemplate) validateDeviceType(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_type", "body", m.DeviceType); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableInterfaceTemplateTypeFormFactorPropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[0,200,800,1000,1150,1170,1050,1100,1200,1300,1310,1320,1350,1400,1500,1510,1520,1550,1600,2600,2610,2620,2630,2640,3010,3020,3040,3080,3160,4000,4010,4040,4050,5000,5050,5100,5150,5200,32767]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableInterfaceTemplateTypeFormFactorPropEnum = append(writableInterfaceTemplateTypeFormFactorPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableInterfaceTemplate) validateFormFactorEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writableInterfaceTemplateTypeFormFactorPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableInterfaceTemplate) validateFormFactor(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.FormFactor) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateFormFactorEnum("form_factor", "body", m.FormFactor); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableInterfaceTemplate) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableInterfaceTemplate) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableInterfaceTemplate) UnmarshalBinary(b []byte) error {
+	var res WritableInterfaceTemplate
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_inventory_item.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_inventory_item.go
new file mode 100644
index 0000000..bf646d6
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_inventory_item.go
@@ -0,0 +1,205 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableInventoryItem writable inventory item
+// swagger:model WritableInventoryItem
+type WritableInventoryItem struct {
+
+	// Asset tag
+	//
+	// A unique tag used to identify this item
+	// Max Length: 50
+	AssetTag string `json:"asset_tag,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// Device
+	// Required: true
+	Device *int64 `json:"device"`
+
+	// Discovered
+	Discovered bool `json:"discovered,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Manufacturer
+	Manufacturer int64 `json:"manufacturer,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Parent
+	Parent int64 `json:"parent,omitempty"`
+
+	// Part ID
+	// Max Length: 50
+	PartID string `json:"part_id,omitempty"`
+
+	// Serial number
+	// Max Length: 50
+	Serial string `json:"serial,omitempty"`
+}
+
+// Validate validates this writable inventory item
+func (m *WritableInventoryItem) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateAssetTag(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePartID(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSerial(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableInventoryItem) validateAssetTag(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.AssetTag) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("asset_tag", "body", string(m.AssetTag), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableInventoryItem) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableInventoryItem) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableInventoryItem) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableInventoryItem) validatePartID(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.PartID) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("part_id", "body", string(m.PartID), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableInventoryItem) validateSerial(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Serial) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("serial", "body", string(m.Serial), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableInventoryItem) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableInventoryItem) UnmarshalBinary(b []byte) error {
+	var res WritableInventoryItem
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_ip_address.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_ip_address.go
new file mode 100644
index 0000000..c03f795
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_ip_address.go
@@ -0,0 +1,222 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableIPAddress writable IP address
+// swagger:model WritableIPAddress
+type WritableIPAddress struct {
+
+	// Address
+	//
+	// IPv4 or IPv6 address (with mask)
+	// Required: true
+	Address *string `json:"address"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Interface
+	Interface int64 `json:"interface,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// NAT (Inside)
+	//
+	// The IP for which this address is the "outside" IP
+	NatInside int64 `json:"nat_inside,omitempty"`
+
+	// Role
+	//
+	// The functional role of this IP
+	Role int64 `json:"role,omitempty"`
+
+	// Status
+	//
+	// The operational status of this IP
+	Status int64 `json:"status,omitempty"`
+
+	// Tenant
+	Tenant int64 `json:"tenant,omitempty"`
+
+	// VRF
+	Vrf int64 `json:"vrf,omitempty"`
+}
+
+// Validate validates this writable IP address
+func (m *WritableIPAddress) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateAddress(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRole(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableIPAddress) validateAddress(formats strfmt.Registry) error {
+
+	if err := validate.Required("address", "body", m.Address); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableIPAddress) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableIpAddressTypeRolePropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[10,20,30,40,41,42,43,44]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableIpAddressTypeRolePropEnum = append(writableIpAddressTypeRolePropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableIPAddress) validateRoleEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writableIpAddressTypeRolePropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableIPAddress) validateRole(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Role) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateRoleEnum("role", "body", m.Role); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableIpAddressTypeStatusPropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[1,2,3,5]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableIpAddressTypeStatusPropEnum = append(writableIpAddressTypeStatusPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableIPAddress) validateStatusEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writableIpAddressTypeStatusPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableIPAddress) validateStatus(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Status) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateStatusEnum("status", "body", m.Status); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableIPAddress) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableIPAddress) UnmarshalBinary(b []byte) error {
+	var res WritableIPAddress
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_platform.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_platform.go
new file mode 100644
index 0000000..1b17784
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_platform.go
@@ -0,0 +1,198 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritablePlatform writable platform
+// swagger:model WritablePlatform
+type WritablePlatform struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Manufacturer
+	//
+	// Optionally limit this platform to devices of a certain manufacturer
+	Manufacturer int64 `json:"manufacturer,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// NAPALM driver
+	//
+	// The name of the NAPALM driver to use when interacting with devices
+	// Max Length: 50
+	NapalmDriver string `json:"napalm_driver,omitempty"`
+
+	// Legacy RPC client
+	RPCClient string `json:"rpc_client,omitempty"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this writable platform
+func (m *WritablePlatform) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateNapalmDriver(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRPCClient(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritablePlatform) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritablePlatform) validateNapalmDriver(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.NapalmDriver) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("napalm_driver", "body", string(m.NapalmDriver), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writablePlatformTypeRPCClientPropEnum []interface{}
+
+func init() {
+	var res []string
+	if err := json.Unmarshal([]byte(`["juniper-junos","cisco-ios","opengear"]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writablePlatformTypeRPCClientPropEnum = append(writablePlatformTypeRPCClientPropEnum, v)
+	}
+}
+
+const (
+	// WritablePlatformRPCClientJuniperJunos captures enum value "juniper-junos"
+	WritablePlatformRPCClientJuniperJunos string = "juniper-junos"
+	// WritablePlatformRPCClientCiscoIos captures enum value "cisco-ios"
+	WritablePlatformRPCClientCiscoIos string = "cisco-ios"
+	// WritablePlatformRPCClientOpengear captures enum value "opengear"
+	WritablePlatformRPCClientOpengear string = "opengear"
+)
+
+// prop value enum
+func (m *WritablePlatform) validateRPCClientEnum(path, location string, value string) error {
+	if err := validate.Enum(path, location, value, writablePlatformTypeRPCClientPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritablePlatform) validateRPCClient(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.RPCClient) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateRPCClientEnum("rpc_client", "body", m.RPCClient); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritablePlatform) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritablePlatform) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritablePlatform) UnmarshalBinary(b []byte) error {
+	var res WritablePlatform
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_power_outlet.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_power_outlet.go
new file mode 100644
index 0000000..81896b1
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_power_outlet.go
@@ -0,0 +1,106 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritablePowerOutlet writable power outlet
+// swagger:model WritablePowerOutlet
+type WritablePowerOutlet struct {
+
+	// Device
+	// Required: true
+	Device *int64 `json:"device"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this writable power outlet
+func (m *WritablePowerOutlet) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritablePowerOutlet) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritablePowerOutlet) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritablePowerOutlet) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritablePowerOutlet) UnmarshalBinary(b []byte) error {
+	var res WritablePowerOutlet
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_power_outlet_template.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_power_outlet_template.go
new file mode 100644
index 0000000..7ac79b7
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_power_outlet_template.go
@@ -0,0 +1,106 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritablePowerOutletTemplate writable power outlet template
+// swagger:model WritablePowerOutletTemplate
+type WritablePowerOutletTemplate struct {
+
+	// Device type
+	// Required: true
+	DeviceType *int64 `json:"device_type"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this writable power outlet template
+func (m *WritablePowerOutletTemplate) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDeviceType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritablePowerOutletTemplate) validateDeviceType(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_type", "body", m.DeviceType); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritablePowerOutletTemplate) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritablePowerOutletTemplate) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritablePowerOutletTemplate) UnmarshalBinary(b []byte) error {
+	var res WritablePowerOutletTemplate
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_power_port.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_power_port.go
new file mode 100644
index 0000000..1e1ae59
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_power_port.go
@@ -0,0 +1,153 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritablePowerPort writable power port
+// swagger:model WritablePowerPort
+type WritablePowerPort struct {
+
+	// Connection status
+	ConnectionStatus bool `json:"connection_status,omitempty"`
+
+	// Device
+	// Required: true
+	Device *int64 `json:"device"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Power outlet
+	PowerOutlet int64 `json:"power_outlet,omitempty"`
+}
+
+// Validate validates this writable power port
+func (m *WritablePowerPort) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateConnectionStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+var writablePowerPortTypeConnectionStatusPropEnum []interface{}
+
+func init() {
+	var res []bool
+	if err := json.Unmarshal([]byte(`[false,true]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writablePowerPortTypeConnectionStatusPropEnum = append(writablePowerPortTypeConnectionStatusPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritablePowerPort) validateConnectionStatusEnum(path, location string, value bool) error {
+	if err := validate.Enum(path, location, value, writablePowerPortTypeConnectionStatusPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritablePowerPort) validateConnectionStatus(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.ConnectionStatus) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateConnectionStatusEnum("connection_status", "body", m.ConnectionStatus); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritablePowerPort) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritablePowerPort) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritablePowerPort) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritablePowerPort) UnmarshalBinary(b []byte) error {
+	var res WritablePowerPort
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_power_port_template.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_power_port_template.go
new file mode 100644
index 0000000..511a277
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_power_port_template.go
@@ -0,0 +1,106 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritablePowerPortTemplate writable power port template
+// swagger:model WritablePowerPortTemplate
+type WritablePowerPortTemplate struct {
+
+	// Device type
+	// Required: true
+	DeviceType *int64 `json:"device_type"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+}
+
+// Validate validates this writable power port template
+func (m *WritablePowerPortTemplate) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDeviceType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritablePowerPortTemplate) validateDeviceType(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_type", "body", m.DeviceType); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritablePowerPortTemplate) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritablePowerPortTemplate) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritablePowerPortTemplate) UnmarshalBinary(b []byte) error {
+	var res WritablePowerPortTemplate
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_prefix.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_prefix.go
new file mode 100644
index 0000000..a777ca6
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_prefix.go
@@ -0,0 +1,186 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritablePrefix writable prefix
+// swagger:model WritablePrefix
+type WritablePrefix struct {
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Is a pool
+	//
+	// All IP addresses within this prefix are considered usable
+	IsPool bool `json:"is_pool,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Prefix
+	//
+	// IPv4 or IPv6 network with mask
+	// Required: true
+	Prefix *string `json:"prefix"`
+
+	// Role
+	//
+	// The primary function of this prefix
+	Role int64 `json:"role,omitempty"`
+
+	// Site
+	Site int64 `json:"site,omitempty"`
+
+	// Status
+	//
+	// Operational status of this prefix
+	Status int64 `json:"status,omitempty"`
+
+	// Tenant
+	Tenant int64 `json:"tenant,omitempty"`
+
+	// VLAN
+	Vlan int64 `json:"vlan,omitempty"`
+
+	// VRF
+	Vrf int64 `json:"vrf,omitempty"`
+}
+
+// Validate validates this writable prefix
+func (m *WritablePrefix) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePrefix(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritablePrefix) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritablePrefix) validatePrefix(formats strfmt.Registry) error {
+
+	if err := validate.Required("prefix", "body", m.Prefix); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writablePrefixTypeStatusPropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[0,1,2,3]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writablePrefixTypeStatusPropEnum = append(writablePrefixTypeStatusPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritablePrefix) validateStatusEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writablePrefixTypeStatusPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritablePrefix) validateStatus(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Status) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateStatusEnum("status", "body", m.Status); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritablePrefix) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritablePrefix) UnmarshalBinary(b []byte) error {
+	var res WritablePrefix
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_provider.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_provider.go
new file mode 100644
index 0000000..65af6ed
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_provider.go
@@ -0,0 +1,211 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableProvider writable provider
+// swagger:model WritableProvider
+type WritableProvider struct {
+
+	// Account number
+	// Max Length: 30
+	Account string `json:"account,omitempty"`
+
+	// Admin contact
+	AdminContact string `json:"admin_contact,omitempty"`
+
+	// ASN
+	// Maximum: 4.294967295e+09
+	// Minimum: 1
+	Asn int64 `json:"asn,omitempty"`
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// NOC contact
+	NocContact string `json:"noc_contact,omitempty"`
+
+	// Portal
+	// Max Length: 200
+	PortalURL strfmt.URI `json:"portal_url,omitempty"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this writable provider
+func (m *WritableProvider) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateAccount(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateAsn(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePortalURL(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableProvider) validateAccount(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Account) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("account", "body", string(m.Account), 30); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableProvider) validateAsn(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Asn) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("asn", "body", int64(m.Asn), 1, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("asn", "body", int64(m.Asn), 4.294967295e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableProvider) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableProvider) validatePortalURL(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.PortalURL) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("portal_url", "body", string(m.PortalURL), 200); err != nil {
+		return err
+	}
+
+	if err := validate.FormatOf("portal_url", "body", "uri", m.PortalURL.String(), formats); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableProvider) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableProvider) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableProvider) UnmarshalBinary(b []byte) error {
+	var res WritableProvider
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_rack.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_rack.go
new file mode 100644
index 0000000..b3a8d28
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_rack.go
@@ -0,0 +1,293 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableRack writable rack
+// swagger:model WritableRack
+type WritableRack struct {
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Descending units
+	//
+	// Units are numbered top-to-bottom
+	DescUnits bool `json:"desc_units,omitempty"`
+
+	// Facility ID
+	// Max Length: 50
+	FacilityID string `json:"facility_id,omitempty"`
+
+	// Group
+	Group int64 `json:"group,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Role
+	Role int64 `json:"role,omitempty"`
+
+	// Serial number
+	// Max Length: 50
+	Serial string `json:"serial,omitempty"`
+
+	// Site
+	// Required: true
+	Site *int64 `json:"site"`
+
+	// Tenant
+	Tenant int64 `json:"tenant,omitempty"`
+
+	// Type
+	Type int64 `json:"type,omitempty"`
+
+	// Height (U)
+	// Maximum: 100
+	// Minimum: 1
+	UHeight int64 `json:"u_height,omitempty"`
+
+	// Width
+	//
+	// Rail-to-rail width
+	Width int64 `json:"width,omitempty"`
+}
+
+// Validate validates this writable rack
+func (m *WritableRack) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateFacilityID(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSerial(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSite(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateType(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateUHeight(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateWidth(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableRack) validateFacilityID(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.FacilityID) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("facility_id", "body", string(m.FacilityID), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableRack) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableRack) validateSerial(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Serial) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("serial", "body", string(m.Serial), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableRack) validateSite(formats strfmt.Registry) error {
+
+	if err := validate.Required("site", "body", m.Site); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableRackTypeTypePropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[100,200,300,1000,1100]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableRackTypeTypePropEnum = append(writableRackTypeTypePropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableRack) validateTypeEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writableRackTypeTypePropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableRack) validateType(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Type) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateTypeEnum("type", "body", m.Type); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableRack) validateUHeight(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.UHeight) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("u_height", "body", int64(m.UHeight), 1, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("u_height", "body", int64(m.UHeight), 100, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableRackTypeWidthPropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[19,23]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableRackTypeWidthPropEnum = append(writableRackTypeWidthPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableRack) validateWidthEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writableRackTypeWidthPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableRack) validateWidth(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Width) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateWidthEnum("width", "body", m.Width); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableRack) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableRack) UnmarshalBinary(b []byte) error {
+	var res WritableRack
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_rack_group.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_rack_group.go
new file mode 100644
index 0000000..e409f49
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_rack_group.go
@@ -0,0 +1,134 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableRackGroup writable rack group
+// swagger:model WritableRackGroup
+type WritableRackGroup struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Site
+	// Required: true
+	Site *int64 `json:"site"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this writable rack group
+func (m *WritableRackGroup) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSite(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableRackGroup) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableRackGroup) validateSite(formats strfmt.Registry) error {
+
+	if err := validate.Required("site", "body", m.Site); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableRackGroup) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableRackGroup) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableRackGroup) UnmarshalBinary(b []byte) error {
+	var res WritableRackGroup
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_rack_reservation.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_rack_reservation.go
new file mode 100644
index 0000000..e66d7c3
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_rack_reservation.go
@@ -0,0 +1,160 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"strconv"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableRackReservation writable rack reservation
+// swagger:model WritableRackReservation
+type WritableRackReservation struct {
+
+	// Description
+	// Required: true
+	// Max Length: 100
+	Description *string `json:"description"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Rack
+	// Required: true
+	Rack *int64 `json:"rack"`
+
+	// units
+	// Required: true
+	Units []*int64 `json:"units"`
+
+	// User
+	// Required: true
+	User *int64 `json:"user"`
+}
+
+// Validate validates this writable rack reservation
+func (m *WritableRackReservation) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRack(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateUnits(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateUser(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableRackReservation) validateDescription(formats strfmt.Registry) error {
+
+	if err := validate.Required("description", "body", m.Description); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("description", "body", string(*m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableRackReservation) validateRack(formats strfmt.Registry) error {
+
+	if err := validate.Required("rack", "body", m.Rack); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableRackReservation) validateUnits(formats strfmt.Registry) error {
+
+	if err := validate.Required("units", "body", m.Units); err != nil {
+		return err
+	}
+
+	for i := 0; i < len(m.Units); i++ {
+
+		if swag.IsZero(m.Units[i]) { // not required
+			continue
+		}
+
+		if err := validate.MinimumInt("units"+"."+strconv.Itoa(i), "body", int64(*m.Units[i]), 0, false); err != nil {
+			return err
+		}
+
+		if err := validate.MaximumInt("units"+"."+strconv.Itoa(i), "body", int64(*m.Units[i]), 32767, false); err != nil {
+			return err
+		}
+
+	}
+
+	return nil
+}
+
+func (m *WritableRackReservation) validateUser(formats strfmt.Registry) error {
+
+	if err := validate.Required("user", "body", m.User); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableRackReservation) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableRackReservation) UnmarshalBinary(b []byte) error {
+	var res WritableRackReservation
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_region.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_region.go
new file mode 100644
index 0000000..9581986
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_region.go
@@ -0,0 +1,119 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableRegion writable region
+// swagger:model WritableRegion
+type WritableRegion struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Parent
+	Parent int64 `json:"parent,omitempty"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this writable region
+func (m *WritableRegion) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableRegion) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableRegion) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableRegion) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableRegion) UnmarshalBinary(b []byte) error {
+	var res WritableRegion
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_secret.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_secret.go
new file mode 100644
index 0000000..e068649
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_secret.go
@@ -0,0 +1,153 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableSecret writable secret
+// swagger:model WritableSecret
+type WritableSecret struct {
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Device
+	// Required: true
+	Device *int64 `json:"device"`
+
+	// Hash
+	// Read Only: true
+	Hash string `json:"hash,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Max Length: 100
+	Name string `json:"name,omitempty"`
+
+	// Plaintext
+	// Required: true
+	Plaintext *string `json:"plaintext"`
+
+	// Role
+	// Required: true
+	Role *int64 `json:"role"`
+}
+
+// Validate validates this writable secret
+func (m *WritableSecret) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDevice(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePlaintext(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRole(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableSecret) validateDevice(formats strfmt.Registry) error {
+
+	if err := validate.Required("device", "body", m.Device); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableSecret) validateName(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Name) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("name", "body", string(m.Name), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableSecret) validatePlaintext(formats strfmt.Registry) error {
+
+	if err := validate.Required("plaintext", "body", m.Plaintext); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableSecret) validateRole(formats strfmt.Registry) error {
+
+	if err := validate.Required("role", "body", m.Role); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableSecret) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableSecret) UnmarshalBinary(b []byte) error {
+	var res WritableSecret
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_service.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_service.go
new file mode 100644
index 0000000..fc4ea39
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_service.go
@@ -0,0 +1,219 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableService writable service
+// swagger:model WritableService
+type WritableService struct {
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// Device
+	Device int64 `json:"device,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// ipaddresses
+	// Unique: true
+	Ipaddresses []int64 `json:"ipaddresses"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 30
+	Name *string `json:"name"`
+
+	// Port number
+	// Required: true
+	// Maximum: 65535
+	// Minimum: 1
+	Port *int64 `json:"port"`
+
+	// Protocol
+	// Required: true
+	Protocol *int64 `json:"protocol"`
+
+	// Virtual machine
+	VirtualMachine int64 `json:"virtual_machine,omitempty"`
+}
+
+// Validate validates this writable service
+func (m *WritableService) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateIpaddresses(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePort(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateProtocol(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableService) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableService) validateIpaddresses(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Ipaddresses) { // not required
+		return nil
+	}
+
+	if err := validate.UniqueItems("ipaddresses", "body", m.Ipaddresses); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableService) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 30); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableService) validatePort(formats strfmt.Registry) error {
+
+	if err := validate.Required("port", "body", m.Port); err != nil {
+		return err
+	}
+
+	if err := validate.MinimumInt("port", "body", int64(*m.Port), 1, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("port", "body", int64(*m.Port), 65535, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableServiceTypeProtocolPropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[6,17]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableServiceTypeProtocolPropEnum = append(writableServiceTypeProtocolPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableService) validateProtocolEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writableServiceTypeProtocolPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableService) validateProtocol(formats strfmt.Registry) error {
+
+	if err := validate.Required("protocol", "body", m.Protocol); err != nil {
+		return err
+	}
+
+	// value enum
+	if err := m.validateProtocolEnum("protocol", "body", *m.Protocol); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableService) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableService) UnmarshalBinary(b []byte) error {
+	var res WritableService
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_site.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_site.go
new file mode 100644
index 0000000..85e1c5f
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_site.go
@@ -0,0 +1,368 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableSite writable site
+// swagger:model WritableSite
+type WritableSite struct {
+
+	// ASN
+	// Maximum: 4.294967295e+09
+	// Minimum: 1
+	Asn int64 `json:"asn,omitempty"`
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Contact E-mail
+	// Max Length: 254
+	ContactEmail strfmt.Email `json:"contact_email,omitempty"`
+
+	// Contact name
+	// Max Length: 50
+	ContactName string `json:"contact_name,omitempty"`
+
+	// Contact phone
+	// Max Length: 20
+	ContactPhone string `json:"contact_phone,omitempty"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// Facility
+	// Max Length: 50
+	Facility string `json:"facility,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Physical address
+	// Max Length: 200
+	PhysicalAddress string `json:"physical_address,omitempty"`
+
+	// Region
+	Region int64 `json:"region,omitempty"`
+
+	// Shipping address
+	// Max Length: 200
+	ShippingAddress string `json:"shipping_address,omitempty"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+
+	// Status
+	Status int64 `json:"status,omitempty"`
+
+	// Tenant
+	Tenant int64 `json:"tenant,omitempty"`
+
+	// Time zone
+	TimeZone string `json:"time_zone,omitempty"`
+}
+
+// Validate validates this writable site
+func (m *WritableSite) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateAsn(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateContactEmail(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateContactName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateContactPhone(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateFacility(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validatePhysicalAddress(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateShippingAddress(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableSite) validateAsn(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Asn) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("asn", "body", int64(m.Asn), 1, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("asn", "body", int64(m.Asn), 4.294967295e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableSite) validateContactEmail(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.ContactEmail) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("contact_email", "body", string(m.ContactEmail), 254); err != nil {
+		return err
+	}
+
+	if err := validate.FormatOf("contact_email", "body", "email", m.ContactEmail.String(), formats); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableSite) validateContactName(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.ContactName) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("contact_name", "body", string(m.ContactName), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableSite) validateContactPhone(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.ContactPhone) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("contact_phone", "body", string(m.ContactPhone), 20); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableSite) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableSite) validateFacility(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Facility) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("facility", "body", string(m.Facility), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableSite) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableSite) validatePhysicalAddress(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.PhysicalAddress) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("physical_address", "body", string(m.PhysicalAddress), 200); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableSite) validateShippingAddress(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.ShippingAddress) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("shipping_address", "body", string(m.ShippingAddress), 200); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableSite) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableSiteTypeStatusPropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[1,2,4]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableSiteTypeStatusPropEnum = append(writableSiteTypeStatusPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableSite) validateStatusEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writableSiteTypeStatusPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableSite) validateStatus(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Status) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateStatusEnum("status", "body", m.Status); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableSite) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableSite) UnmarshalBinary(b []byte) error {
+	var res WritableSite
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_tenant.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_tenant.go
new file mode 100644
index 0000000..f430ea5
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_tenant.go
@@ -0,0 +1,157 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableTenant writable tenant
+// swagger:model WritableTenant
+type WritableTenant struct {
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Description
+	//
+	// Long-form name (optional)
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// Group
+	Group int64 `json:"group,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 30
+	Name *string `json:"name"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this writable tenant
+func (m *WritableTenant) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableTenant) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableTenant) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 30); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableTenant) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableTenant) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableTenant) UnmarshalBinary(b []byte) error {
+	var res WritableTenant
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_topology_map.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_topology_map.go
new file mode 100644
index 0000000..c78e654
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_topology_map.go
@@ -0,0 +1,161 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableTopologyMap writable topology map
+// swagger:model WritableTopologyMap
+type WritableTopologyMap struct {
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// Device patterns
+	//
+	// Identify devices to include in the diagram using regular expressions, one per line. Each line will result in a new tier of the drawing. Separate multiple regexes within a line using semicolons. Devices will be rendered in the order they are defined.
+	// Required: true
+	DevicePatterns *string `json:"device_patterns"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Site
+	Site int64 `json:"site,omitempty"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this writable topology map
+func (m *WritableTopologyMap) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDevicePatterns(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableTopologyMap) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableTopologyMap) validateDevicePatterns(formats strfmt.Registry) error {
+
+	if err := validate.Required("device_patterns", "body", m.DevicePatterns); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableTopologyMap) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableTopologyMap) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableTopologyMap) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableTopologyMap) UnmarshalBinary(b []byte) error {
+	var res WritableTopologyMap
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_virtual_chassis.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_virtual_chassis.go
new file mode 100644
index 0000000..e204361
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_virtual_chassis.go
@@ -0,0 +1,105 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableVirtualChassis writable virtual chassis
+// swagger:model WritableVirtualChassis
+type WritableVirtualChassis struct {
+
+	// Domain
+	// Max Length: 30
+	Domain string `json:"domain,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Master
+	// Required: true
+	Master *int64 `json:"master"`
+}
+
+// Validate validates this writable virtual chassis
+func (m *WritableVirtualChassis) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDomain(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateMaster(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableVirtualChassis) validateDomain(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Domain) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("domain", "body", string(m.Domain), 30); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableVirtualChassis) validateMaster(formats strfmt.Registry) error {
+
+	if err := validate.Required("master", "body", m.Master); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableVirtualChassis) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableVirtualChassis) UnmarshalBinary(b []byte) error {
+	var res WritableVirtualChassis
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_virtual_machine.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_virtual_machine.go
new file mode 100644
index 0000000..4ba7fe7
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_virtual_machine.go
@@ -0,0 +1,260 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableVirtualMachine writable virtual machine
+// swagger:model WritableVirtualMachine
+type WritableVirtualMachine struct {
+
+	// Cluster
+	// Required: true
+	Cluster *int64 `json:"cluster"`
+
+	// Comments
+	Comments string `json:"comments,omitempty"`
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Disk (GB)
+	// Maximum: 2.147483647e+09
+	// Minimum: 0
+	Disk *int64 `json:"disk,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Memory (MB)
+	// Maximum: 2.147483647e+09
+	// Minimum: 0
+	Memory *int64 `json:"memory,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 64
+	Name *string `json:"name"`
+
+	// Platform
+	Platform int64 `json:"platform,omitempty"`
+
+	// Primary IPv4
+	PrimaryIp4 int64 `json:"primary_ip4,omitempty"`
+
+	// Primary IPv6
+	PrimaryIp6 int64 `json:"primary_ip6,omitempty"`
+
+	// Role
+	Role int64 `json:"role,omitempty"`
+
+	// Status
+	Status int64 `json:"status,omitempty"`
+
+	// Tenant
+	Tenant int64 `json:"tenant,omitempty"`
+
+	// VCPUs
+	// Maximum: 32767
+	// Minimum: 0
+	Vcpus *int64 `json:"vcpus,omitempty"`
+}
+
+// Validate validates this writable virtual machine
+func (m *WritableVirtualMachine) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateCluster(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateDisk(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateMemory(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateVcpus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableVirtualMachine) validateCluster(formats strfmt.Registry) error {
+
+	if err := validate.Required("cluster", "body", m.Cluster); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableVirtualMachine) validateDisk(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Disk) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("disk", "body", int64(*m.Disk), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("disk", "body", int64(*m.Disk), 2.147483647e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableVirtualMachine) validateMemory(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Memory) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("memory", "body", int64(*m.Memory), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("memory", "body", int64(*m.Memory), 2.147483647e+09, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableVirtualMachine) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableVirtualMachineTypeStatusPropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[1,0,3]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableVirtualMachineTypeStatusPropEnum = append(writableVirtualMachineTypeStatusPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableVirtualMachine) validateStatusEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writableVirtualMachineTypeStatusPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableVirtualMachine) validateStatus(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Status) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateStatusEnum("status", "body", m.Status); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableVirtualMachine) validateVcpus(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Vcpus) { // not required
+		return nil
+	}
+
+	if err := validate.MinimumInt("vcpus", "body", int64(*m.Vcpus), 0, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("vcpus", "body", int64(*m.Vcpus), 32767, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableVirtualMachine) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableVirtualMachine) UnmarshalBinary(b []byte) error {
+	var res WritableVirtualMachine
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_vlan.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_vlan.go
new file mode 100644
index 0000000..9a0feab
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_vlan.go
@@ -0,0 +1,205 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"encoding/json"
+
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableVLAN writable v l a n
+// swagger:model WritableVLAN
+type WritableVLAN struct {
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// Group
+	Group int64 `json:"group,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 64
+	Name *string `json:"name"`
+
+	// Role
+	Role int64 `json:"role,omitempty"`
+
+	// Site
+	Site int64 `json:"site,omitempty"`
+
+	// Status
+	Status int64 `json:"status,omitempty"`
+
+	// Tenant
+	Tenant int64 `json:"tenant,omitempty"`
+
+	// ID
+	// Required: true
+	// Maximum: 4094
+	// Minimum: 1
+	Vid *int64 `json:"vid"`
+}
+
+// Validate validates this writable v l a n
+func (m *WritableVLAN) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateStatus(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateVid(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableVLAN) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableVLAN) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 64); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var writableVLANTypeStatusPropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[1,2,3]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		writableVLANTypeStatusPropEnum = append(writableVLANTypeStatusPropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *WritableVLAN) validateStatusEnum(path, location string, value int64) error {
+	if err := validate.Enum(path, location, value, writableVLANTypeStatusPropEnum); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *WritableVLAN) validateStatus(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Status) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateStatusEnum("status", "body", m.Status); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableVLAN) validateVid(formats strfmt.Registry) error {
+
+	if err := validate.Required("vid", "body", m.Vid); err != nil {
+		return err
+	}
+
+	if err := validate.MinimumInt("vid", "body", int64(*m.Vid), 1, false); err != nil {
+		return err
+	}
+
+	if err := validate.MaximumInt("vid", "body", int64(*m.Vid), 4094, false); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableVLAN) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableVLAN) UnmarshalBinary(b []byte) error {
+	var res WritableVLAN
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_vlangroup.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_vlangroup.go
new file mode 100644
index 0000000..1e55728
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_vlangroup.go
@@ -0,0 +1,119 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableVLANGroup writable v l a n group
+// swagger:model WritableVLANGroup
+type WritableVLANGroup struct {
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Site
+	Site int64 `json:"site,omitempty"`
+
+	// Slug
+	// Required: true
+	// Max Length: 50
+	// Pattern: ^[-a-zA-Z0-9_]+$
+	Slug *string `json:"slug"`
+}
+
+// Validate validates this writable v l a n group
+func (m *WritableVLANGroup) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateSlug(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableVLANGroup) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableVLANGroup) validateSlug(formats strfmt.Registry) error {
+
+	if err := validate.Required("slug", "body", m.Slug); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("slug", "body", string(*m.Slug), 50); err != nil {
+		return err
+	}
+
+	if err := validate.Pattern("slug", "body", string(*m.Slug), `^[-a-zA-Z0-9_]+$`); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableVLANGroup) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableVLANGroup) UnmarshalBinary(b []byte) error {
+	var res WritableVLANGroup
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_vrf.go b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_vrf.go
new file mode 100644
index 0000000..546f47e
--- /dev/null
+++ b/go/vendor/github.com/digitalocean/go-netbox/netbox/models/writable_vrf.go
@@ -0,0 +1,152 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+// Copyright 2018 The go-netbox Authors.
+//
+// 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 models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	strfmt "github.com/go-openapi/strfmt"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// WritableVRF writable v r f
+// swagger:model WritableVRF
+type WritableVRF struct {
+
+	// Created
+	// Read Only: true
+	Created strfmt.Date `json:"created,omitempty"`
+
+	// Custom fields
+	CustomFields interface{} `json:"custom_fields,omitempty"`
+
+	// Description
+	// Max Length: 100
+	Description string `json:"description,omitempty"`
+
+	// Enforce unique space
+	//
+	// Prevent duplicate prefixes/IP addresses within this VRF
+	EnforceUnique bool `json:"enforce_unique,omitempty"`
+
+	// ID
+	// Read Only: true
+	ID int64 `json:"id,omitempty"`
+
+	// Last updated
+	// Read Only: true
+	LastUpdated strfmt.DateTime `json:"last_updated,omitempty"`
+
+	// Name
+	// Required: true
+	// Max Length: 50
+	Name *string `json:"name"`
+
+	// Route distinguisher
+	// Required: true
+	// Max Length: 21
+	Rd *string `json:"rd"`
+
+	// Tenant
+	Tenant int64 `json:"tenant,omitempty"`
+}
+
+// Validate validates this writable v r f
+func (m *WritableVRF) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateDescription(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if err := m.validateRd(formats); err != nil {
+		// prop
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *WritableVRF) validateDescription(formats strfmt.Registry) error {
+
+	if swag.IsZero(m.Description) { // not required
+		return nil
+	}
+
+	if err := validate.MaxLength("description", "body", string(m.Description), 100); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableVRF) validateName(formats strfmt.Registry) error {
+
+	if err := validate.Required("name", "body", m.Name); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("name", "body", string(*m.Name), 50); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *WritableVRF) validateRd(formats strfmt.Registry) error {
+
+	if err := validate.Required("rd", "body", m.Rd); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("rd", "body", string(*m.Rd), 21); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *WritableVRF) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *WritableVRF) UnmarshalBinary(b []byte) error {
+	var res WritableVRF
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}