// Package api provides primitives to interact with the openapi HTTP API.
//
// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.7.1 DO NOT EDIT.
package api

import (
	"encoding/json"
	"errors"
	"time"

	"github.com/oapi-codegen/runtime"
	openapi_types "github.com/oapi-codegen/runtime/types"
)

const (
	BearerAuthScopes bearerAuthContextKey = "BearerAuth.Scopes"
	TokenAuthScopes  tokenAuthContextKey  = "TokenAuth.Scopes"
)

// Defines values for AccessRestrictionsCrowdsecMode.
const (
	AccessRestrictionsCrowdsecModeEnforce AccessRestrictionsCrowdsecMode = "enforce"
	AccessRestrictionsCrowdsecModeObserve AccessRestrictionsCrowdsecMode = "observe"
	AccessRestrictionsCrowdsecModeOff     AccessRestrictionsCrowdsecMode = "off"
)

// Valid indicates whether the value is a known member of the AccessRestrictionsCrowdsecMode enum.
func (e AccessRestrictionsCrowdsecMode) Valid() bool {
	switch e {
	case AccessRestrictionsCrowdsecModeEnforce:
		return true
	case AccessRestrictionsCrowdsecModeObserve:
		return true
	case AccessRestrictionsCrowdsecModeOff:
		return true
	default:
		return false
	}
}

// Defines values for AgentNetworkCatalogProviderKind.
const (
	AgentNetworkCatalogProviderKindCustom   AgentNetworkCatalogProviderKind = "custom"
	AgentNetworkCatalogProviderKindGateway  AgentNetworkCatalogProviderKind = "gateway"
	AgentNetworkCatalogProviderKindProvider AgentNetworkCatalogProviderKind = "provider"
)

// Valid indicates whether the value is a known member of the AgentNetworkCatalogProviderKind enum.
func (e AgentNetworkCatalogProviderKind) Valid() bool {
	switch e {
	case AgentNetworkCatalogProviderKindCustom:
		return true
	case AgentNetworkCatalogProviderKindGateway:
		return true
	case AgentNetworkCatalogProviderKindProvider:
		return true
	default:
		return false
	}
}

// Defines values for AgentNetworkConsumptionDimensionKind.
const (
	AgentNetworkConsumptionDimensionKindGroup AgentNetworkConsumptionDimensionKind = "group"
	AgentNetworkConsumptionDimensionKindUser  AgentNetworkConsumptionDimensionKind = "user"
)

// Valid indicates whether the value is a known member of the AgentNetworkConsumptionDimensionKind enum.
func (e AgentNetworkConsumptionDimensionKind) Valid() bool {
	switch e {
	case AgentNetworkConsumptionDimensionKindGroup:
		return true
	case AgentNetworkConsumptionDimensionKindUser:
		return true
	default:
		return false
	}
}

// Defines values for CreateAzureIntegrationRequestHost.
const (
	CreateAzureIntegrationRequestHostMicrosoftCom CreateAzureIntegrationRequestHost = "microsoft.com"
	CreateAzureIntegrationRequestHostMicrosoftUs  CreateAzureIntegrationRequestHost = "microsoft.us"
)

// Valid indicates whether the value is a known member of the CreateAzureIntegrationRequestHost enum.
func (e CreateAzureIntegrationRequestHost) Valid() bool {
	switch e {
	case CreateAzureIntegrationRequestHostMicrosoftCom:
		return true
	case CreateAzureIntegrationRequestHostMicrosoftUs:
		return true
	default:
		return false
	}
}

// Defines values for CreateIntegrationRequestPlatform.
const (
	CreateIntegrationRequestPlatformDatadog     CreateIntegrationRequestPlatform = "datadog"
	CreateIntegrationRequestPlatformFirehose    CreateIntegrationRequestPlatform = "firehose"
	CreateIntegrationRequestPlatformGenericHttp CreateIntegrationRequestPlatform = "generic_http"
	CreateIntegrationRequestPlatformS3          CreateIntegrationRequestPlatform = "s3"
)

// Valid indicates whether the value is a known member of the CreateIntegrationRequestPlatform enum.
func (e CreateIntegrationRequestPlatform) Valid() bool {
	switch e {
	case CreateIntegrationRequestPlatformDatadog:
		return true
	case CreateIntegrationRequestPlatformFirehose:
		return true
	case CreateIntegrationRequestPlatformGenericHttp:
		return true
	case CreateIntegrationRequestPlatformS3:
		return true
	default:
		return false
	}
}

// Defines values for DNSRecordType.
const (
	DNSRecordTypeA     DNSRecordType = "A"
	DNSRecordTypeAAAA  DNSRecordType = "AAAA"
	DNSRecordTypeCNAME DNSRecordType = "CNAME"
)

// Valid indicates whether the value is a known member of the DNSRecordType enum.
func (e DNSRecordType) Valid() bool {
	switch e {
	case DNSRecordTypeA:
		return true
	case DNSRecordTypeAAAA:
		return true
	case DNSRecordTypeCNAME:
		return true
	default:
		return false
	}
}

// Defines values for EventActivityCode.
const (
	EventActivityCodeAccountCreate                                 EventActivityCode = "account.create"
	EventActivityCodeAccountDelete                                 EventActivityCode = "account.delete"
	EventActivityCodeAccountDnsDomainUpdate                        EventActivityCode = "account.dns.domain.update"
	EventActivityCodeAccountNetworkRangeUpdate                     EventActivityCode = "account.network.range.update"
	EventActivityCodeAccountPeerInactivityExpirationDisable        EventActivityCode = "account.peer.inactivity.expiration.disable"
	EventActivityCodeAccountPeerInactivityExpirationEnable         EventActivityCode = "account.peer.inactivity.expiration.enable"
	EventActivityCodeAccountPeerInactivityExpirationUpdate         EventActivityCode = "account.peer.inactivity.expiration.update"
	EventActivityCodeAccountSettingGroupPropagationDisable         EventActivityCode = "account.setting.group.propagation.disable"
	EventActivityCodeAccountSettingGroupPropagationEnable          EventActivityCode = "account.setting.group.propagation.enable"
	EventActivityCodeAccountSettingLazyConnectionDisable           EventActivityCode = "account.setting.lazy.connection.disable"
	EventActivityCodeAccountSettingLazyConnectionEnable            EventActivityCode = "account.setting.lazy.connection.enable"
	EventActivityCodeAccountSettingPeerApprovalDisable             EventActivityCode = "account.setting.peer.approval.disable"
	EventActivityCodeAccountSettingPeerApprovalEnable              EventActivityCode = "account.setting.peer.approval.enable"
	EventActivityCodeAccountSettingPeerLoginExpirationDisable      EventActivityCode = "account.setting.peer.login.expiration.disable"
	EventActivityCodeAccountSettingPeerLoginExpirationEnable       EventActivityCode = "account.setting.peer.login.expiration.enable"
	EventActivityCodeAccountSettingPeerLoginExpirationUpdate       EventActivityCode = "account.setting.peer.login.expiration.update"
	EventActivityCodeAccountSettingRoutingPeerDnsResolutionDisable EventActivityCode = "account.setting.routing.peer.dns.resolution.disable"
	EventActivityCodeAccountSettingRoutingPeerDnsResolutionEnable  EventActivityCode = "account.setting.routing.peer.dns.resolution.enable"
	EventActivityCodeAccountSettingsAutoVersionUpdate              EventActivityCode = "account.settings.auto.version.update"
	EventActivityCodeDashboardLogin                                EventActivityCode = "dashboard.login"
	EventActivityCodeDnsSettingDisabledManagementGroupAdd          EventActivityCode = "dns.setting.disabled.management.group.add"
	EventActivityCodeDnsSettingDisabledManagementGroupDelete       EventActivityCode = "dns.setting.disabled.management.group.delete"
	EventActivityCodeDnsZoneCreate                                 EventActivityCode = "dns.zone.create"
	EventActivityCodeDnsZoneDelete                                 EventActivityCode = "dns.zone.delete"
	EventActivityCodeDnsZoneRecordCreate                           EventActivityCode = "dns.zone.record.create"
	EventActivityCodeDnsZoneRecordDelete                           EventActivityCode = "dns.zone.record.delete"
	EventActivityCodeDnsZoneRecordUpdate                           EventActivityCode = "dns.zone.record.update"
	EventActivityCodeDnsZoneUpdate                                 EventActivityCode = "dns.zone.update"
	EventActivityCodeGroupAdd                                      EventActivityCode = "group.add"
	EventActivityCodeGroupDelete                                   EventActivityCode = "group.delete"
	EventActivityCodeGroupUpdate                                   EventActivityCode = "group.update"
	EventActivityCodeIdentityproviderCreate                        EventActivityCode = "identityprovider.create"
	EventActivityCodeIdentityproviderDelete                        EventActivityCode = "identityprovider.delete"
	EventActivityCodeIdentityproviderUpdate                        EventActivityCode = "identityprovider.update"
	EventActivityCodeIntegrationCreate                             EventActivityCode = "integration.create"
	EventActivityCodeIntegrationDelete                             EventActivityCode = "integration.delete"
	EventActivityCodeIntegrationUpdate                             EventActivityCode = "integration.update"
	EventActivityCodeNameserverGroupAdd                            EventActivityCode = "nameserver.group.add"
	EventActivityCodeNameserverGroupDelete                         EventActivityCode = "nameserver.group.delete"
	EventActivityCodeNameserverGroupUpdate                         EventActivityCode = "nameserver.group.update"
	EventActivityCodeNetworkCreate                                 EventActivityCode = "network.create"
	EventActivityCodeNetworkDelete                                 EventActivityCode = "network.delete"
	EventActivityCodeNetworkResourceCreate                         EventActivityCode = "network.resource.create"
	EventActivityCodeNetworkResourceDelete                         EventActivityCode = "network.resource.delete"
	EventActivityCodeNetworkResourceUpdate                         EventActivityCode = "network.resource.update"
	EventActivityCodeNetworkRouterCreate                           EventActivityCode = "network.router.create"
	EventActivityCodeNetworkRouterDelete                           EventActivityCode = "network.router.delete"
	EventActivityCodeNetworkRouterUpdate                           EventActivityCode = "network.router.update"
	EventActivityCodeNetworkUpdate                                 EventActivityCode = "network.update"
	EventActivityCodePeerApprovalRevoke                            EventActivityCode = "peer.approval.revoke"
	EventActivityCodePeerApprove                                   EventActivityCode = "peer.approve"
	EventActivityCodePeerGroupAdd                                  EventActivityCode = "peer.group.add"
	EventActivityCodePeerGroupDelete                               EventActivityCode = "peer.group.delete"
	EventActivityCodePeerInactivityExpirationDisable               EventActivityCode = "peer.inactivity.expiration.disable"
	EventActivityCodePeerInactivityExpirationEnable                EventActivityCode = "peer.inactivity.expiration.enable"
	EventActivityCodePeerIpUpdate                                  EventActivityCode = "peer.ip.update"
	EventActivityCodePeerJobCreate                                 EventActivityCode = "peer.job.create"
	EventActivityCodePeerLoginExpirationDisable                    EventActivityCode = "peer.login.expiration.disable"
	EventActivityCodePeerLoginExpirationEnable                     EventActivityCode = "peer.login.expiration.enable"
	EventActivityCodePeerLoginExpire                               EventActivityCode = "peer.login.expire"
	EventActivityCodePeerRename                                    EventActivityCode = "peer.rename"
	EventActivityCodePeerSetupkeyAdd                               EventActivityCode = "peer.setupkey.add"
	EventActivityCodePeerSshDisable                                EventActivityCode = "peer.ssh.disable"
	EventActivityCodePeerSshEnable                                 EventActivityCode = "peer.ssh.enable"
	EventActivityCodePeerUserAdd                                   EventActivityCode = "peer.user.add"
	EventActivityCodePersonalAccessTokenCreate                     EventActivityCode = "personal.access.token.create"
	EventActivityCodePersonalAccessTokenDelete                     EventActivityCode = "personal.access.token.delete"
	EventActivityCodePolicyAdd                                     EventActivityCode = "policy.add"
	EventActivityCodePolicyDelete                                  EventActivityCode = "policy.delete"
	EventActivityCodePolicyUpdate                                  EventActivityCode = "policy.update"
	EventActivityCodePostureCheckCreate                            EventActivityCode = "posture.check.create"
	EventActivityCodePostureCheckDelete                            EventActivityCode = "posture.check.delete"
	EventActivityCodePostureCheckUpdate                            EventActivityCode = "posture.check.update"
	EventActivityCodeResourceGroupAdd                              EventActivityCode = "resource.group.add"
	EventActivityCodeResourceGroupDelete                           EventActivityCode = "resource.group.delete"
	EventActivityCodeRouteAdd                                      EventActivityCode = "route.add"
	EventActivityCodeRouteDelete                                   EventActivityCode = "route.delete"
	EventActivityCodeRouteUpdate                                   EventActivityCode = "route.update"
	EventActivityCodeRuleAdd                                       EventActivityCode = "rule.add"
	EventActivityCodeRuleDelete                                    EventActivityCode = "rule.delete"
	EventActivityCodeRuleUpdate                                    EventActivityCode = "rule.update"
	EventActivityCodeServiceCreate                                 EventActivityCode = "service.create"
	EventActivityCodeServiceDelete                                 EventActivityCode = "service.delete"
	EventActivityCodeServiceUpdate                                 EventActivityCode = "service.update"
	EventActivityCodeServiceUserCreate                             EventActivityCode = "service.user.create"
	EventActivityCodeServiceUserDelete                             EventActivityCode = "service.user.delete"
	EventActivityCodeSetupkeyAdd                                   EventActivityCode = "setupkey.add"
	EventActivityCodeSetupkeyDelete                                EventActivityCode = "setupkey.delete"
	EventActivityCodeSetupkeyGroupAdd                              EventActivityCode = "setupkey.group.add"
	EventActivityCodeSetupkeyGroupDelete                           EventActivityCode = "setupkey.group.delete"
	EventActivityCodeSetupkeyOveruse                               EventActivityCode = "setupkey.overuse"
	EventActivityCodeSetupkeyRevoke                                EventActivityCode = "setupkey.revoke"
	EventActivityCodeSetupkeyUpdate                                EventActivityCode = "setupkey.update"
	EventActivityCodeTransferredOwnerRole                          EventActivityCode = "transferred.owner.role"
	EventActivityCodeUserApprove                                   EventActivityCode = "user.approve"
	EventActivityCodeUserBlock                                     EventActivityCode = "user.block"
	EventActivityCodeUserCreate                                    EventActivityCode = "user.create"
	EventActivityCodeUserDelete                                    EventActivityCode = "user.delete"
	EventActivityCodeUserGroupAdd                                  EventActivityCode = "user.group.add"
	EventActivityCodeUserGroupDelete                               EventActivityCode = "user.group.delete"
	EventActivityCodeUserInvite                                    EventActivityCode = "user.invite"
	EventActivityCodeUserInviteLinkAccept                          EventActivityCode = "user.invite.link.accept"
	EventActivityCodeUserInviteLinkCreate                          EventActivityCode = "user.invite.link.create"
	EventActivityCodeUserInviteLinkDelete                          EventActivityCode = "user.invite.link.delete"
	EventActivityCodeUserInviteLinkRegenerate                      EventActivityCode = "user.invite.link.regenerate"
	EventActivityCodeUserJoin                                      EventActivityCode = "user.join"
	EventActivityCodeUserPasswordChange                            EventActivityCode = "user.password.change"
	EventActivityCodeUserPeerDelete                                EventActivityCode = "user.peer.delete"
	EventActivityCodeUserPeerLogin                                 EventActivityCode = "user.peer.login"
	EventActivityCodeUserReject                                    EventActivityCode = "user.reject"
	EventActivityCodeUserRoleUpdate                                EventActivityCode = "user.role.update"
	EventActivityCodeUserUnblock                                   EventActivityCode = "user.unblock"
)

// Valid indicates whether the value is a known member of the EventActivityCode enum.
func (e EventActivityCode) Valid() bool {
	switch e {
	case EventActivityCodeAccountCreate:
		return true
	case EventActivityCodeAccountDelete:
		return true
	case EventActivityCodeAccountDnsDomainUpdate:
		return true
	case EventActivityCodeAccountNetworkRangeUpdate:
		return true
	case EventActivityCodeAccountPeerInactivityExpirationDisable:
		return true
	case EventActivityCodeAccountPeerInactivityExpirationEnable:
		return true
	case EventActivityCodeAccountPeerInactivityExpirationUpdate:
		return true
	case EventActivityCodeAccountSettingGroupPropagationDisable:
		return true
	case EventActivityCodeAccountSettingGroupPropagationEnable:
		return true
	case EventActivityCodeAccountSettingLazyConnectionDisable:
		return true
	case EventActivityCodeAccountSettingLazyConnectionEnable:
		return true
	case EventActivityCodeAccountSettingPeerApprovalDisable:
		return true
	case EventActivityCodeAccountSettingPeerApprovalEnable:
		return true
	case EventActivityCodeAccountSettingPeerLoginExpirationDisable:
		return true
	case EventActivityCodeAccountSettingPeerLoginExpirationEnable:
		return true
	case EventActivityCodeAccountSettingPeerLoginExpirationUpdate:
		return true
	case EventActivityCodeAccountSettingRoutingPeerDnsResolutionDisable:
		return true
	case EventActivityCodeAccountSettingRoutingPeerDnsResolutionEnable:
		return true
	case EventActivityCodeAccountSettingsAutoVersionUpdate:
		return true
	case EventActivityCodeDashboardLogin:
		return true
	case EventActivityCodeDnsSettingDisabledManagementGroupAdd:
		return true
	case EventActivityCodeDnsSettingDisabledManagementGroupDelete:
		return true
	case EventActivityCodeDnsZoneCreate:
		return true
	case EventActivityCodeDnsZoneDelete:
		return true
	case EventActivityCodeDnsZoneRecordCreate:
		return true
	case EventActivityCodeDnsZoneRecordDelete:
		return true
	case EventActivityCodeDnsZoneRecordUpdate:
		return true
	case EventActivityCodeDnsZoneUpdate:
		return true
	case EventActivityCodeGroupAdd:
		return true
	case EventActivityCodeGroupDelete:
		return true
	case EventActivityCodeGroupUpdate:
		return true
	case EventActivityCodeIdentityproviderCreate:
		return true
	case EventActivityCodeIdentityproviderDelete:
		return true
	case EventActivityCodeIdentityproviderUpdate:
		return true
	case EventActivityCodeIntegrationCreate:
		return true
	case EventActivityCodeIntegrationDelete:
		return true
	case EventActivityCodeIntegrationUpdate:
		return true
	case EventActivityCodeNameserverGroupAdd:
		return true
	case EventActivityCodeNameserverGroupDelete:
		return true
	case EventActivityCodeNameserverGroupUpdate:
		return true
	case EventActivityCodeNetworkCreate:
		return true
	case EventActivityCodeNetworkDelete:
		return true
	case EventActivityCodeNetworkResourceCreate:
		return true
	case EventActivityCodeNetworkResourceDelete:
		return true
	case EventActivityCodeNetworkResourceUpdate:
		return true
	case EventActivityCodeNetworkRouterCreate:
		return true
	case EventActivityCodeNetworkRouterDelete:
		return true
	case EventActivityCodeNetworkRouterUpdate:
		return true
	case EventActivityCodeNetworkUpdate:
		return true
	case EventActivityCodePeerApprovalRevoke:
		return true
	case EventActivityCodePeerApprove:
		return true
	case EventActivityCodePeerGroupAdd:
		return true
	case EventActivityCodePeerGroupDelete:
		return true
	case EventActivityCodePeerInactivityExpirationDisable:
		return true
	case EventActivityCodePeerInactivityExpirationEnable:
		return true
	case EventActivityCodePeerIpUpdate:
		return true
	case EventActivityCodePeerJobCreate:
		return true
	case EventActivityCodePeerLoginExpirationDisable:
		return true
	case EventActivityCodePeerLoginExpirationEnable:
		return true
	case EventActivityCodePeerLoginExpire:
		return true
	case EventActivityCodePeerRename:
		return true
	case EventActivityCodePeerSetupkeyAdd:
		return true
	case EventActivityCodePeerSshDisable:
		return true
	case EventActivityCodePeerSshEnable:
		return true
	case EventActivityCodePeerUserAdd:
		return true
	case EventActivityCodePersonalAccessTokenCreate:
		return true
	case EventActivityCodePersonalAccessTokenDelete:
		return true
	case EventActivityCodePolicyAdd:
		return true
	case EventActivityCodePolicyDelete:
		return true
	case EventActivityCodePolicyUpdate:
		return true
	case EventActivityCodePostureCheckCreate:
		return true
	case EventActivityCodePostureCheckDelete:
		return true
	case EventActivityCodePostureCheckUpdate:
		return true
	case EventActivityCodeResourceGroupAdd:
		return true
	case EventActivityCodeResourceGroupDelete:
		return true
	case EventActivityCodeRouteAdd:
		return true
	case EventActivityCodeRouteDelete:
		return true
	case EventActivityCodeRouteUpdate:
		return true
	case EventActivityCodeRuleAdd:
		return true
	case EventActivityCodeRuleDelete:
		return true
	case EventActivityCodeRuleUpdate:
		return true
	case EventActivityCodeServiceCreate:
		return true
	case EventActivityCodeServiceDelete:
		return true
	case EventActivityCodeServiceUpdate:
		return true
	case EventActivityCodeServiceUserCreate:
		return true
	case EventActivityCodeServiceUserDelete:
		return true
	case EventActivityCodeSetupkeyAdd:
		return true
	case EventActivityCodeSetupkeyDelete:
		return true
	case EventActivityCodeSetupkeyGroupAdd:
		return true
	case EventActivityCodeSetupkeyGroupDelete:
		return true
	case EventActivityCodeSetupkeyOveruse:
		return true
	case EventActivityCodeSetupkeyRevoke:
		return true
	case EventActivityCodeSetupkeyUpdate:
		return true
	case EventActivityCodeTransferredOwnerRole:
		return true
	case EventActivityCodeUserApprove:
		return true
	case EventActivityCodeUserBlock:
		return true
	case EventActivityCodeUserCreate:
		return true
	case EventActivityCodeUserDelete:
		return true
	case EventActivityCodeUserGroupAdd:
		return true
	case EventActivityCodeUserGroupDelete:
		return true
	case EventActivityCodeUserInvite:
		return true
	case EventActivityCodeUserInviteLinkAccept:
		return true
	case EventActivityCodeUserInviteLinkCreate:
		return true
	case EventActivityCodeUserInviteLinkDelete:
		return true
	case EventActivityCodeUserInviteLinkRegenerate:
		return true
	case EventActivityCodeUserJoin:
		return true
	case EventActivityCodeUserPasswordChange:
		return true
	case EventActivityCodeUserPeerDelete:
		return true
	case EventActivityCodeUserPeerLogin:
		return true
	case EventActivityCodeUserReject:
		return true
	case EventActivityCodeUserRoleUpdate:
		return true
	case EventActivityCodeUserUnblock:
		return true
	default:
		return false
	}
}

// Defines values for GeoLocationCheckAction.
const (
	GeoLocationCheckActionAllow GeoLocationCheckAction = "allow"
	GeoLocationCheckActionDeny  GeoLocationCheckAction = "deny"
)

// Valid indicates whether the value is a known member of the GeoLocationCheckAction enum.
func (e GeoLocationCheckAction) Valid() bool {
	switch e {
	case GeoLocationCheckActionAllow:
		return true
	case GeoLocationCheckActionDeny:
		return true
	default:
		return false
	}
}

// Defines values for GroupIssued.
const (
	GroupIssuedApi         GroupIssued = "api"
	GroupIssuedIntegration GroupIssued = "integration"
	GroupIssuedJwt         GroupIssued = "jwt"
)

// Valid indicates whether the value is a known member of the GroupIssued enum.
func (e GroupIssued) Valid() bool {
	switch e {
	case GroupIssuedApi:
		return true
	case GroupIssuedIntegration:
		return true
	case GroupIssuedJwt:
		return true
	default:
		return false
	}
}

// Defines values for GroupMinimumIssued.
const (
	GroupMinimumIssuedApi         GroupMinimumIssued = "api"
	GroupMinimumIssuedIntegration GroupMinimumIssued = "integration"
	GroupMinimumIssuedJwt         GroupMinimumIssued = "jwt"
)

// Valid indicates whether the value is a known member of the GroupMinimumIssued enum.
func (e GroupMinimumIssued) Valid() bool {
	switch e {
	case GroupMinimumIssuedApi:
		return true
	case GroupMinimumIssuedIntegration:
		return true
	case GroupMinimumIssuedJwt:
		return true
	default:
		return false
	}
}

// Defines values for IdentityProviderType.
const (
	IdentityProviderTypeAdfs      IdentityProviderType = "adfs"
	IdentityProviderTypeEntra     IdentityProviderType = "entra"
	IdentityProviderTypeGoogle    IdentityProviderType = "google"
	IdentityProviderTypeMicrosoft IdentityProviderType = "microsoft"
	IdentityProviderTypeOidc      IdentityProviderType = "oidc"
	IdentityProviderTypeOkta      IdentityProviderType = "okta"
	IdentityProviderTypePocketid  IdentityProviderType = "pocketid"
	IdentityProviderTypeZitadel   IdentityProviderType = "zitadel"
)

// Valid indicates whether the value is a known member of the IdentityProviderType enum.
func (e IdentityProviderType) Valid() bool {
	switch e {
	case IdentityProviderTypeAdfs:
		return true
	case IdentityProviderTypeEntra:
		return true
	case IdentityProviderTypeGoogle:
		return true
	case IdentityProviderTypeMicrosoft:
		return true
	case IdentityProviderTypeOidc:
		return true
	case IdentityProviderTypeOkta:
		return true
	case IdentityProviderTypePocketid:
		return true
	case IdentityProviderTypeZitadel:
		return true
	default:
		return false
	}
}

// Defines values for IngressPortAllocationPortMappingProtocol.
const (
	IngressPortAllocationPortMappingProtocolTcp    IngressPortAllocationPortMappingProtocol = "tcp"
	IngressPortAllocationPortMappingProtocolTcpudp IngressPortAllocationPortMappingProtocol = "tcp/udp"
	IngressPortAllocationPortMappingProtocolUdp    IngressPortAllocationPortMappingProtocol = "udp"
)

// Valid indicates whether the value is a known member of the IngressPortAllocationPortMappingProtocol enum.
func (e IngressPortAllocationPortMappingProtocol) Valid() bool {
	switch e {
	case IngressPortAllocationPortMappingProtocolTcp:
		return true
	case IngressPortAllocationPortMappingProtocolTcpudp:
		return true
	case IngressPortAllocationPortMappingProtocolUdp:
		return true
	default:
		return false
	}
}

// Defines values for IngressPortAllocationRequestDirectPortProtocol.
const (
	IngressPortAllocationRequestDirectPortProtocolTcp    IngressPortAllocationRequestDirectPortProtocol = "tcp"
	IngressPortAllocationRequestDirectPortProtocolTcpudp IngressPortAllocationRequestDirectPortProtocol = "tcp/udp"
	IngressPortAllocationRequestDirectPortProtocolUdp    IngressPortAllocationRequestDirectPortProtocol = "udp"
)

// Valid indicates whether the value is a known member of the IngressPortAllocationRequestDirectPortProtocol enum.
func (e IngressPortAllocationRequestDirectPortProtocol) Valid() bool {
	switch e {
	case IngressPortAllocationRequestDirectPortProtocolTcp:
		return true
	case IngressPortAllocationRequestDirectPortProtocolTcpudp:
		return true
	case IngressPortAllocationRequestDirectPortProtocolUdp:
		return true
	default:
		return false
	}
}

// Defines values for IngressPortAllocationRequestPortRangeProtocol.
const (
	IngressPortAllocationRequestPortRangeProtocolTcp    IngressPortAllocationRequestPortRangeProtocol = "tcp"
	IngressPortAllocationRequestPortRangeProtocolTcpudp IngressPortAllocationRequestPortRangeProtocol = "tcp/udp"
	IngressPortAllocationRequestPortRangeProtocolUdp    IngressPortAllocationRequestPortRangeProtocol = "udp"
)

// Valid indicates whether the value is a known member of the IngressPortAllocationRequestPortRangeProtocol enum.
func (e IngressPortAllocationRequestPortRangeProtocol) Valid() bool {
	switch e {
	case IngressPortAllocationRequestPortRangeProtocolTcp:
		return true
	case IngressPortAllocationRequestPortRangeProtocolTcpudp:
		return true
	case IngressPortAllocationRequestPortRangeProtocolUdp:
		return true
	default:
		return false
	}
}

// Defines values for IntegrationResponsePlatform.
const (
	IntegrationResponsePlatformDatadog     IntegrationResponsePlatform = "datadog"
	IntegrationResponsePlatformFirehose    IntegrationResponsePlatform = "firehose"
	IntegrationResponsePlatformGenericHttp IntegrationResponsePlatform = "generic_http"
	IntegrationResponsePlatformS3          IntegrationResponsePlatform = "s3"
)

// Valid indicates whether the value is a known member of the IntegrationResponsePlatform enum.
func (e IntegrationResponsePlatform) Valid() bool {
	switch e {
	case IntegrationResponsePlatformDatadog:
		return true
	case IntegrationResponsePlatformFirehose:
		return true
	case IntegrationResponsePlatformGenericHttp:
		return true
	case IntegrationResponsePlatformS3:
		return true
	default:
		return false
	}
}

// Defines values for InvoiceResponseType.
const (
	InvoiceResponseTypeAccount InvoiceResponseType = "account"
	InvoiceResponseTypeTenants InvoiceResponseType = "tenants"
)

// Valid indicates whether the value is a known member of the InvoiceResponseType enum.
func (e InvoiceResponseType) Valid() bool {
	switch e {
	case InvoiceResponseTypeAccount:
		return true
	case InvoiceResponseTypeTenants:
		return true
	default:
		return false
	}
}

// Defines values for JobResponseStatus.
const (
	JobResponseStatusFailed    JobResponseStatus = "failed"
	JobResponseStatusPending   JobResponseStatus = "pending"
	JobResponseStatusSucceeded JobResponseStatus = "succeeded"
)

// Valid indicates whether the value is a known member of the JobResponseStatus enum.
func (e JobResponseStatus) Valid() bool {
	switch e {
	case JobResponseStatusFailed:
		return true
	case JobResponseStatusPending:
		return true
	case JobResponseStatusSucceeded:
		return true
	default:
		return false
	}
}

// Defines values for NameserverNsType.
const (
	NameserverNsTypeUdp NameserverNsType = "udp"
)

// Valid indicates whether the value is a known member of the NameserverNsType enum.
func (e NameserverNsType) Valid() bool {
	switch e {
	case NameserverNsTypeUdp:
		return true
	default:
		return false
	}
}

// Defines values for NetworkResourceType.
const (
	NetworkResourceTypeDomain NetworkResourceType = "domain"
	NetworkResourceTypeHost   NetworkResourceType = "host"
	NetworkResourceTypeSubnet NetworkResourceType = "subnet"
)

// Valid indicates whether the value is a known member of the NetworkResourceType enum.
func (e NetworkResourceType) Valid() bool {
	switch e {
	case NetworkResourceTypeDomain:
		return true
	case NetworkResourceTypeHost:
		return true
	case NetworkResourceTypeSubnet:
		return true
	default:
		return false
	}
}

// Defines values for NotificationChannelType.
const (
	NotificationChannelTypeEmail   NotificationChannelType = "email"
	NotificationChannelTypeWebhook NotificationChannelType = "webhook"
)

// Valid indicates whether the value is a known member of the NotificationChannelType enum.
func (e NotificationChannelType) Valid() bool {
	switch e {
	case NotificationChannelTypeEmail:
		return true
	case NotificationChannelTypeWebhook:
		return true
	default:
		return false
	}
}

// Defines values for PeerNetworkRangeCheckAction.
const (
	PeerNetworkRangeCheckActionAllow PeerNetworkRangeCheckAction = "allow"
	PeerNetworkRangeCheckActionDeny  PeerNetworkRangeCheckAction = "deny"
)

// Valid indicates whether the value is a known member of the PeerNetworkRangeCheckAction enum.
func (e PeerNetworkRangeCheckAction) Valid() bool {
	switch e {
	case PeerNetworkRangeCheckActionAllow:
		return true
	case PeerNetworkRangeCheckActionDeny:
		return true
	default:
		return false
	}
}

// Defines values for PolicyRuleAction.
const (
	PolicyRuleActionAccept PolicyRuleAction = "accept"
	PolicyRuleActionDrop   PolicyRuleAction = "drop"
)

// Valid indicates whether the value is a known member of the PolicyRuleAction enum.
func (e PolicyRuleAction) Valid() bool {
	switch e {
	case PolicyRuleActionAccept:
		return true
	case PolicyRuleActionDrop:
		return true
	default:
		return false
	}
}

// Defines values for PolicyRuleProtocol.
const (
	PolicyRuleProtocolAll        PolicyRuleProtocol = "all"
	PolicyRuleProtocolIcmp       PolicyRuleProtocol = "icmp"
	PolicyRuleProtocolNetbirdSsh PolicyRuleProtocol = "netbird-ssh"
	PolicyRuleProtocolTcp        PolicyRuleProtocol = "tcp"
	PolicyRuleProtocolUdp        PolicyRuleProtocol = "udp"
)

// Valid indicates whether the value is a known member of the PolicyRuleProtocol enum.
func (e PolicyRuleProtocol) Valid() bool {
	switch e {
	case PolicyRuleProtocolAll:
		return true
	case PolicyRuleProtocolIcmp:
		return true
	case PolicyRuleProtocolNetbirdSsh:
		return true
	case PolicyRuleProtocolTcp:
		return true
	case PolicyRuleProtocolUdp:
		return true
	default:
		return false
	}
}

// Defines values for PolicyRuleMinimumAction.
const (
	PolicyRuleMinimumActionAccept PolicyRuleMinimumAction = "accept"
	PolicyRuleMinimumActionDrop   PolicyRuleMinimumAction = "drop"
)

// Valid indicates whether the value is a known member of the PolicyRuleMinimumAction enum.
func (e PolicyRuleMinimumAction) Valid() bool {
	switch e {
	case PolicyRuleMinimumActionAccept:
		return true
	case PolicyRuleMinimumActionDrop:
		return true
	default:
		return false
	}
}

// Defines values for PolicyRuleMinimumProtocol.
const (
	PolicyRuleMinimumProtocolAll        PolicyRuleMinimumProtocol = "all"
	PolicyRuleMinimumProtocolIcmp       PolicyRuleMinimumProtocol = "icmp"
	PolicyRuleMinimumProtocolNetbirdSsh PolicyRuleMinimumProtocol = "netbird-ssh"
	PolicyRuleMinimumProtocolTcp        PolicyRuleMinimumProtocol = "tcp"
	PolicyRuleMinimumProtocolUdp        PolicyRuleMinimumProtocol = "udp"
)

// Valid indicates whether the value is a known member of the PolicyRuleMinimumProtocol enum.
func (e PolicyRuleMinimumProtocol) Valid() bool {
	switch e {
	case PolicyRuleMinimumProtocolAll:
		return true
	case PolicyRuleMinimumProtocolIcmp:
		return true
	case PolicyRuleMinimumProtocolNetbirdSsh:
		return true
	case PolicyRuleMinimumProtocolTcp:
		return true
	case PolicyRuleMinimumProtocolUdp:
		return true
	default:
		return false
	}
}

// Defines values for PolicyRuleUpdateAction.
const (
	PolicyRuleUpdateActionAccept PolicyRuleUpdateAction = "accept"
	PolicyRuleUpdateActionDrop   PolicyRuleUpdateAction = "drop"
)

// Valid indicates whether the value is a known member of the PolicyRuleUpdateAction enum.
func (e PolicyRuleUpdateAction) Valid() bool {
	switch e {
	case PolicyRuleUpdateActionAccept:
		return true
	case PolicyRuleUpdateActionDrop:
		return true
	default:
		return false
	}
}

// Defines values for PolicyRuleUpdateProtocol.
const (
	PolicyRuleUpdateProtocolAll        PolicyRuleUpdateProtocol = "all"
	PolicyRuleUpdateProtocolIcmp       PolicyRuleUpdateProtocol = "icmp"
	PolicyRuleUpdateProtocolNetbirdSsh PolicyRuleUpdateProtocol = "netbird-ssh"
	PolicyRuleUpdateProtocolTcp        PolicyRuleUpdateProtocol = "tcp"
	PolicyRuleUpdateProtocolUdp        PolicyRuleUpdateProtocol = "udp"
)

// Valid indicates whether the value is a known member of the PolicyRuleUpdateProtocol enum.
func (e PolicyRuleUpdateProtocol) Valid() bool {
	switch e {
	case PolicyRuleUpdateProtocolAll:
		return true
	case PolicyRuleUpdateProtocolIcmp:
		return true
	case PolicyRuleUpdateProtocolNetbirdSsh:
		return true
	case PolicyRuleUpdateProtocolTcp:
		return true
	case PolicyRuleUpdateProtocolUdp:
		return true
	default:
		return false
	}
}

// Defines values for ProxyClusterType.
const (
	ProxyClusterTypeAccount ProxyClusterType = "account"
	ProxyClusterTypeShared  ProxyClusterType = "shared"
)

// Valid indicates whether the value is a known member of the ProxyClusterType enum.
func (e ProxyClusterType) Valid() bool {
	switch e {
	case ProxyClusterTypeAccount:
		return true
	case ProxyClusterTypeShared:
		return true
	default:
		return false
	}
}

// Defines values for ResourceType.
const (
	ResourceTypeDomain ResourceType = "domain"
	ResourceTypeHost   ResourceType = "host"
	ResourceTypePeer   ResourceType = "peer"
	ResourceTypeSubnet ResourceType = "subnet"
)

// Valid indicates whether the value is a known member of the ResourceType enum.
func (e ResourceType) Valid() bool {
	switch e {
	case ResourceTypeDomain:
		return true
	case ResourceTypeHost:
		return true
	case ResourceTypePeer:
		return true
	case ResourceTypeSubnet:
		return true
	default:
		return false
	}
}

// Defines values for ReverseProxyDomainType.
const (
	ReverseProxyDomainTypeCustom ReverseProxyDomainType = "custom"
	ReverseProxyDomainTypeFree   ReverseProxyDomainType = "free"
)

// Valid indicates whether the value is a known member of the ReverseProxyDomainType enum.
func (e ReverseProxyDomainType) Valid() bool {
	switch e {
	case ReverseProxyDomainTypeCustom:
		return true
	case ReverseProxyDomainTypeFree:
		return true
	default:
		return false
	}
}

// Defines values for SentinelOneMatchAttributesNetworkStatus.
const (
	SentinelOneMatchAttributesNetworkStatusConnected    SentinelOneMatchAttributesNetworkStatus = "connected"
	SentinelOneMatchAttributesNetworkStatusDisconnected SentinelOneMatchAttributesNetworkStatus = "disconnected"
	SentinelOneMatchAttributesNetworkStatusQuarantined  SentinelOneMatchAttributesNetworkStatus = "quarantined"
)

// Valid indicates whether the value is a known member of the SentinelOneMatchAttributesNetworkStatus enum.
func (e SentinelOneMatchAttributesNetworkStatus) Valid() bool {
	switch e {
	case SentinelOneMatchAttributesNetworkStatusConnected:
		return true
	case SentinelOneMatchAttributesNetworkStatusDisconnected:
		return true
	case SentinelOneMatchAttributesNetworkStatusQuarantined:
		return true
	default:
		return false
	}
}

// Defines values for ServiceMode.
const (
	ServiceModeHttp ServiceMode = "http"
	ServiceModeTcp  ServiceMode = "tcp"
	ServiceModeTls  ServiceMode = "tls"
	ServiceModeUdp  ServiceMode = "udp"
)

// Valid indicates whether the value is a known member of the ServiceMode enum.
func (e ServiceMode) Valid() bool {
	switch e {
	case ServiceModeHttp:
		return true
	case ServiceModeTcp:
		return true
	case ServiceModeTls:
		return true
	case ServiceModeUdp:
		return true
	default:
		return false
	}
}

// Defines values for ServiceMetaStatus.
const (
	ServiceMetaStatusActive             ServiceMetaStatus = "active"
	ServiceMetaStatusCertificateFailed  ServiceMetaStatus = "certificate_failed"
	ServiceMetaStatusCertificatePending ServiceMetaStatus = "certificate_pending"
	ServiceMetaStatusError              ServiceMetaStatus = "error"
	ServiceMetaStatusPending            ServiceMetaStatus = "pending"
	ServiceMetaStatusTunnelNotCreated   ServiceMetaStatus = "tunnel_not_created"
)

// Valid indicates whether the value is a known member of the ServiceMetaStatus enum.
func (e ServiceMetaStatus) Valid() bool {
	switch e {
	case ServiceMetaStatusActive:
		return true
	case ServiceMetaStatusCertificateFailed:
		return true
	case ServiceMetaStatusCertificatePending:
		return true
	case ServiceMetaStatusError:
		return true
	case ServiceMetaStatusPending:
		return true
	case ServiceMetaStatusTunnelNotCreated:
		return true
	default:
		return false
	}
}

// Defines values for ServiceRequestMode.
const (
	ServiceRequestModeHttp ServiceRequestMode = "http"
	ServiceRequestModeTcp  ServiceRequestMode = "tcp"
	ServiceRequestModeTls  ServiceRequestMode = "tls"
	ServiceRequestModeUdp  ServiceRequestMode = "udp"
)

// Valid indicates whether the value is a known member of the ServiceRequestMode enum.
func (e ServiceRequestMode) Valid() bool {
	switch e {
	case ServiceRequestModeHttp:
		return true
	case ServiceRequestModeTcp:
		return true
	case ServiceRequestModeTls:
		return true
	case ServiceRequestModeUdp:
		return true
	default:
		return false
	}
}

// Defines values for ServiceTargetProtocol.
const (
	ServiceTargetProtocolHttp  ServiceTargetProtocol = "http"
	ServiceTargetProtocolHttps ServiceTargetProtocol = "https"
	ServiceTargetProtocolTcp   ServiceTargetProtocol = "tcp"
	ServiceTargetProtocolUdp   ServiceTargetProtocol = "udp"
)

// Valid indicates whether the value is a known member of the ServiceTargetProtocol enum.
func (e ServiceTargetProtocol) Valid() bool {
	switch e {
	case ServiceTargetProtocolHttp:
		return true
	case ServiceTargetProtocolHttps:
		return true
	case ServiceTargetProtocolTcp:
		return true
	case ServiceTargetProtocolUdp:
		return true
	default:
		return false
	}
}

// Defines values for ServiceTargetTargetType.
const (
	ServiceTargetTargetTypeCluster ServiceTargetTargetType = "cluster"
	ServiceTargetTargetTypeDomain  ServiceTargetTargetType = "domain"
	ServiceTargetTargetTypeHost    ServiceTargetTargetType = "host"
	ServiceTargetTargetTypePeer    ServiceTargetTargetType = "peer"
	ServiceTargetTargetTypeSubnet  ServiceTargetTargetType = "subnet"
)

// Valid indicates whether the value is a known member of the ServiceTargetTargetType enum.
func (e ServiceTargetTargetType) Valid() bool {
	switch e {
	case ServiceTargetTargetTypeCluster:
		return true
	case ServiceTargetTargetTypeDomain:
		return true
	case ServiceTargetTargetTypeHost:
		return true
	case ServiceTargetTargetTypePeer:
		return true
	case ServiceTargetTargetTypeSubnet:
		return true
	default:
		return false
	}
}

// Defines values for ServiceTargetOptionsPathRewrite.
const (
	ServiceTargetOptionsPathRewritePreserve ServiceTargetOptionsPathRewrite = "preserve"
)

// Valid indicates whether the value is a known member of the ServiceTargetOptionsPathRewrite enum.
func (e ServiceTargetOptionsPathRewrite) Valid() bool {
	switch e {
	case ServiceTargetOptionsPathRewritePreserve:
		return true
	default:
		return false
	}
}

// Defines values for TenantResponseStatus.
const (
	TenantResponseStatusActive   TenantResponseStatus = "active"
	TenantResponseStatusExisting TenantResponseStatus = "existing"
	TenantResponseStatusInvited  TenantResponseStatus = "invited"
	TenantResponseStatusPending  TenantResponseStatus = "pending"
)

// Valid indicates whether the value is a known member of the TenantResponseStatus enum.
func (e TenantResponseStatus) Valid() bool {
	switch e {
	case TenantResponseStatusActive:
		return true
	case TenantResponseStatusExisting:
		return true
	case TenantResponseStatusInvited:
		return true
	case TenantResponseStatusPending:
		return true
	default:
		return false
	}
}

// Defines values for UserStatus.
const (
	UserStatusActive  UserStatus = "active"
	UserStatusBlocked UserStatus = "blocked"
	UserStatusInvited UserStatus = "invited"
)

// Valid indicates whether the value is a known member of the UserStatus enum.
func (e UserStatus) Valid() bool {
	switch e {
	case UserStatusActive:
		return true
	case UserStatusBlocked:
		return true
	case UserStatusInvited:
		return true
	default:
		return false
	}
}

// Defines values for WorkloadType.
const (
	WorkloadTypeBundle WorkloadType = "bundle"
)

// Valid indicates whether the value is a known member of the WorkloadType enum.
func (e WorkloadType) Valid() bool {
	switch e {
	case WorkloadTypeBundle:
		return true
	default:
		return false
	}
}

// Defines values for GetApiAgentNetworkAccessLogSessionsParamsSortBy.
const (
	GetApiAgentNetworkAccessLogSessionsParamsSortByCostUsd      GetApiAgentNetworkAccessLogSessionsParamsSortBy = "cost_usd"
	GetApiAgentNetworkAccessLogSessionsParamsSortByDecision     GetApiAgentNetworkAccessLogSessionsParamsSortBy = "decision"
	GetApiAgentNetworkAccessLogSessionsParamsSortByDuration     GetApiAgentNetworkAccessLogSessionsParamsSortBy = "duration"
	GetApiAgentNetworkAccessLogSessionsParamsSortByRequestCount GetApiAgentNetworkAccessLogSessionsParamsSortBy = "request_count"
	GetApiAgentNetworkAccessLogSessionsParamsSortByStartedAt    GetApiAgentNetworkAccessLogSessionsParamsSortBy = "started_at"
	GetApiAgentNetworkAccessLogSessionsParamsSortByStatusCode   GetApiAgentNetworkAccessLogSessionsParamsSortBy = "status_code"
	GetApiAgentNetworkAccessLogSessionsParamsSortByTimestamp    GetApiAgentNetworkAccessLogSessionsParamsSortBy = "timestamp"
	GetApiAgentNetworkAccessLogSessionsParamsSortByTotalTokens  GetApiAgentNetworkAccessLogSessionsParamsSortBy = "total_tokens"
	GetApiAgentNetworkAccessLogSessionsParamsSortByUserId       GetApiAgentNetworkAccessLogSessionsParamsSortBy = "user_id"
)

// Valid indicates whether the value is a known member of the GetApiAgentNetworkAccessLogSessionsParamsSortBy enum.
func (e GetApiAgentNetworkAccessLogSessionsParamsSortBy) Valid() bool {
	switch e {
	case GetApiAgentNetworkAccessLogSessionsParamsSortByCostUsd:
		return true
	case GetApiAgentNetworkAccessLogSessionsParamsSortByDecision:
		return true
	case GetApiAgentNetworkAccessLogSessionsParamsSortByDuration:
		return true
	case GetApiAgentNetworkAccessLogSessionsParamsSortByRequestCount:
		return true
	case GetApiAgentNetworkAccessLogSessionsParamsSortByStartedAt:
		return true
	case GetApiAgentNetworkAccessLogSessionsParamsSortByStatusCode:
		return true
	case GetApiAgentNetworkAccessLogSessionsParamsSortByTimestamp:
		return true
	case GetApiAgentNetworkAccessLogSessionsParamsSortByTotalTokens:
		return true
	case GetApiAgentNetworkAccessLogSessionsParamsSortByUserId:
		return true
	default:
		return false
	}
}

// Defines values for GetApiAgentNetworkAccessLogSessionsParamsSortOrder.
const (
	GetApiAgentNetworkAccessLogSessionsParamsSortOrderAsc  GetApiAgentNetworkAccessLogSessionsParamsSortOrder = "asc"
	GetApiAgentNetworkAccessLogSessionsParamsSortOrderDesc GetApiAgentNetworkAccessLogSessionsParamsSortOrder = "desc"
)

// Valid indicates whether the value is a known member of the GetApiAgentNetworkAccessLogSessionsParamsSortOrder enum.
func (e GetApiAgentNetworkAccessLogSessionsParamsSortOrder) Valid() bool {
	switch e {
	case GetApiAgentNetworkAccessLogSessionsParamsSortOrderAsc:
		return true
	case GetApiAgentNetworkAccessLogSessionsParamsSortOrderDesc:
		return true
	default:
		return false
	}
}

// Defines values for GetApiAgentNetworkAccessLogsParamsSortBy.
const (
	GetApiAgentNetworkAccessLogsParamsSortByCostUsd     GetApiAgentNetworkAccessLogsParamsSortBy = "cost_usd"
	GetApiAgentNetworkAccessLogsParamsSortByDecision    GetApiAgentNetworkAccessLogsParamsSortBy = "decision"
	GetApiAgentNetworkAccessLogsParamsSortByDuration    GetApiAgentNetworkAccessLogsParamsSortBy = "duration"
	GetApiAgentNetworkAccessLogsParamsSortByModel       GetApiAgentNetworkAccessLogsParamsSortBy = "model"
	GetApiAgentNetworkAccessLogsParamsSortByProvider    GetApiAgentNetworkAccessLogsParamsSortBy = "provider"
	GetApiAgentNetworkAccessLogsParamsSortByStatusCode  GetApiAgentNetworkAccessLogsParamsSortBy = "status_code"
	GetApiAgentNetworkAccessLogsParamsSortByTimestamp   GetApiAgentNetworkAccessLogsParamsSortBy = "timestamp"
	GetApiAgentNetworkAccessLogsParamsSortByTotalTokens GetApiAgentNetworkAccessLogsParamsSortBy = "total_tokens"
	GetApiAgentNetworkAccessLogsParamsSortByUserId      GetApiAgentNetworkAccessLogsParamsSortBy = "user_id"
)

// Valid indicates whether the value is a known member of the GetApiAgentNetworkAccessLogsParamsSortBy enum.
func (e GetApiAgentNetworkAccessLogsParamsSortBy) Valid() bool {
	switch e {
	case GetApiAgentNetworkAccessLogsParamsSortByCostUsd:
		return true
	case GetApiAgentNetworkAccessLogsParamsSortByDecision:
		return true
	case GetApiAgentNetworkAccessLogsParamsSortByDuration:
		return true
	case GetApiAgentNetworkAccessLogsParamsSortByModel:
		return true
	case GetApiAgentNetworkAccessLogsParamsSortByProvider:
		return true
	case GetApiAgentNetworkAccessLogsParamsSortByStatusCode:
		return true
	case GetApiAgentNetworkAccessLogsParamsSortByTimestamp:
		return true
	case GetApiAgentNetworkAccessLogsParamsSortByTotalTokens:
		return true
	case GetApiAgentNetworkAccessLogsParamsSortByUserId:
		return true
	default:
		return false
	}
}

// Defines values for GetApiAgentNetworkAccessLogsParamsSortOrder.
const (
	GetApiAgentNetworkAccessLogsParamsSortOrderAsc  GetApiAgentNetworkAccessLogsParamsSortOrder = "asc"
	GetApiAgentNetworkAccessLogsParamsSortOrderDesc GetApiAgentNetworkAccessLogsParamsSortOrder = "desc"
)

// Valid indicates whether the value is a known member of the GetApiAgentNetworkAccessLogsParamsSortOrder enum.
func (e GetApiAgentNetworkAccessLogsParamsSortOrder) Valid() bool {
	switch e {
	case GetApiAgentNetworkAccessLogsParamsSortOrderAsc:
		return true
	case GetApiAgentNetworkAccessLogsParamsSortOrderDesc:
		return true
	default:
		return false
	}
}

// Defines values for GetApiAgentNetworkUsageOverviewParamsGranularity.
const (
	GetApiAgentNetworkUsageOverviewParamsGranularityDay   GetApiAgentNetworkUsageOverviewParamsGranularity = "day"
	GetApiAgentNetworkUsageOverviewParamsGranularityMonth GetApiAgentNetworkUsageOverviewParamsGranularity = "month"
	GetApiAgentNetworkUsageOverviewParamsGranularityWeek  GetApiAgentNetworkUsageOverviewParamsGranularity = "week"
)

// Valid indicates whether the value is a known member of the GetApiAgentNetworkUsageOverviewParamsGranularity enum.
func (e GetApiAgentNetworkUsageOverviewParamsGranularity) Valid() bool {
	switch e {
	case GetApiAgentNetworkUsageOverviewParamsGranularityDay:
		return true
	case GetApiAgentNetworkUsageOverviewParamsGranularityMonth:
		return true
	case GetApiAgentNetworkUsageOverviewParamsGranularityWeek:
		return true
	default:
		return false
	}
}

// Defines values for GetApiEventsNetworkTrafficParamsType.
const (
	GetApiEventsNetworkTrafficParamsTypeTYPEDROP    GetApiEventsNetworkTrafficParamsType = "TYPE_DROP"
	GetApiEventsNetworkTrafficParamsTypeTYPEEND     GetApiEventsNetworkTrafficParamsType = "TYPE_END"
	GetApiEventsNetworkTrafficParamsTypeTYPESTART   GetApiEventsNetworkTrafficParamsType = "TYPE_START"
	GetApiEventsNetworkTrafficParamsTypeTYPEUNKNOWN GetApiEventsNetworkTrafficParamsType = "TYPE_UNKNOWN"
)

// Valid indicates whether the value is a known member of the GetApiEventsNetworkTrafficParamsType enum.
func (e GetApiEventsNetworkTrafficParamsType) Valid() bool {
	switch e {
	case GetApiEventsNetworkTrafficParamsTypeTYPEDROP:
		return true
	case GetApiEventsNetworkTrafficParamsTypeTYPEEND:
		return true
	case GetApiEventsNetworkTrafficParamsTypeTYPESTART:
		return true
	case GetApiEventsNetworkTrafficParamsTypeTYPEUNKNOWN:
		return true
	default:
		return false
	}
}

// Defines values for GetApiEventsNetworkTrafficParamsConnectionType.
const (
	GetApiEventsNetworkTrafficParamsConnectionTypeP2P    GetApiEventsNetworkTrafficParamsConnectionType = "P2P"
	GetApiEventsNetworkTrafficParamsConnectionTypeROUTED GetApiEventsNetworkTrafficParamsConnectionType = "ROUTED"
)

// Valid indicates whether the value is a known member of the GetApiEventsNetworkTrafficParamsConnectionType enum.
func (e GetApiEventsNetworkTrafficParamsConnectionType) Valid() bool {
	switch e {
	case GetApiEventsNetworkTrafficParamsConnectionTypeP2P:
		return true
	case GetApiEventsNetworkTrafficParamsConnectionTypeROUTED:
		return true
	default:
		return false
	}
}

// Defines values for GetApiEventsNetworkTrafficParamsDirection.
const (
	GetApiEventsNetworkTrafficParamsDirectionDIRECTIONUNKNOWN GetApiEventsNetworkTrafficParamsDirection = "DIRECTION_UNKNOWN"
	GetApiEventsNetworkTrafficParamsDirectionEGRESS           GetApiEventsNetworkTrafficParamsDirection = "EGRESS"
	GetApiEventsNetworkTrafficParamsDirectionINGRESS          GetApiEventsNetworkTrafficParamsDirection = "INGRESS"
)

// Valid indicates whether the value is a known member of the GetApiEventsNetworkTrafficParamsDirection enum.
func (e GetApiEventsNetworkTrafficParamsDirection) Valid() bool {
	switch e {
	case GetApiEventsNetworkTrafficParamsDirectionDIRECTIONUNKNOWN:
		return true
	case GetApiEventsNetworkTrafficParamsDirectionEGRESS:
		return true
	case GetApiEventsNetworkTrafficParamsDirectionINGRESS:
		return true
	default:
		return false
	}
}

// Defines values for GetApiEventsProxyParamsSortBy.
const (
	GetApiEventsProxyParamsSortByAuthMethod GetApiEventsProxyParamsSortBy = "auth_method"
	GetApiEventsProxyParamsSortByDuration   GetApiEventsProxyParamsSortBy = "duration"
	GetApiEventsProxyParamsSortByHost       GetApiEventsProxyParamsSortBy = "host"
	GetApiEventsProxyParamsSortByMethod     GetApiEventsProxyParamsSortBy = "method"
	GetApiEventsProxyParamsSortByPath       GetApiEventsProxyParamsSortBy = "path"
	GetApiEventsProxyParamsSortByReason     GetApiEventsProxyParamsSortBy = "reason"
	GetApiEventsProxyParamsSortBySourceIp   GetApiEventsProxyParamsSortBy = "source_ip"
	GetApiEventsProxyParamsSortByStatusCode GetApiEventsProxyParamsSortBy = "status_code"
	GetApiEventsProxyParamsSortByTimestamp  GetApiEventsProxyParamsSortBy = "timestamp"
	GetApiEventsProxyParamsSortByUrl        GetApiEventsProxyParamsSortBy = "url"
	GetApiEventsProxyParamsSortByUserId     GetApiEventsProxyParamsSortBy = "user_id"
)

// Valid indicates whether the value is a known member of the GetApiEventsProxyParamsSortBy enum.
func (e GetApiEventsProxyParamsSortBy) Valid() bool {
	switch e {
	case GetApiEventsProxyParamsSortByAuthMethod:
		return true
	case GetApiEventsProxyParamsSortByDuration:
		return true
	case GetApiEventsProxyParamsSortByHost:
		return true
	case GetApiEventsProxyParamsSortByMethod:
		return true
	case GetApiEventsProxyParamsSortByPath:
		return true
	case GetApiEventsProxyParamsSortByReason:
		return true
	case GetApiEventsProxyParamsSortBySourceIp:
		return true
	case GetApiEventsProxyParamsSortByStatusCode:
		return true
	case GetApiEventsProxyParamsSortByTimestamp:
		return true
	case GetApiEventsProxyParamsSortByUrl:
		return true
	case GetApiEventsProxyParamsSortByUserId:
		return true
	default:
		return false
	}
}

// Defines values for GetApiEventsProxyParamsSortOrder.
const (
	GetApiEventsProxyParamsSortOrderAsc  GetApiEventsProxyParamsSortOrder = "asc"
	GetApiEventsProxyParamsSortOrderDesc GetApiEventsProxyParamsSortOrder = "desc"
)

// Valid indicates whether the value is a known member of the GetApiEventsProxyParamsSortOrder enum.
func (e GetApiEventsProxyParamsSortOrder) Valid() bool {
	switch e {
	case GetApiEventsProxyParamsSortOrderAsc:
		return true
	case GetApiEventsProxyParamsSortOrderDesc:
		return true
	default:
		return false
	}
}

// Defines values for GetApiEventsProxyParamsMethod.
const (
	GetApiEventsProxyParamsMethodDELETE  GetApiEventsProxyParamsMethod = "DELETE"
	GetApiEventsProxyParamsMethodGET     GetApiEventsProxyParamsMethod = "GET"
	GetApiEventsProxyParamsMethodHEAD    GetApiEventsProxyParamsMethod = "HEAD"
	GetApiEventsProxyParamsMethodOPTIONS GetApiEventsProxyParamsMethod = "OPTIONS"
	GetApiEventsProxyParamsMethodPATCH   GetApiEventsProxyParamsMethod = "PATCH"
	GetApiEventsProxyParamsMethodPOST    GetApiEventsProxyParamsMethod = "POST"
	GetApiEventsProxyParamsMethodPUT     GetApiEventsProxyParamsMethod = "PUT"
)

// Valid indicates whether the value is a known member of the GetApiEventsProxyParamsMethod enum.
func (e GetApiEventsProxyParamsMethod) Valid() bool {
	switch e {
	case GetApiEventsProxyParamsMethodDELETE:
		return true
	case GetApiEventsProxyParamsMethodGET:
		return true
	case GetApiEventsProxyParamsMethodHEAD:
		return true
	case GetApiEventsProxyParamsMethodOPTIONS:
		return true
	case GetApiEventsProxyParamsMethodPATCH:
		return true
	case GetApiEventsProxyParamsMethodPOST:
		return true
	case GetApiEventsProxyParamsMethodPUT:
		return true
	default:
		return false
	}
}

// Defines values for GetApiEventsProxyParamsStatus.
const (
	GetApiEventsProxyParamsStatusFailed  GetApiEventsProxyParamsStatus = "failed"
	GetApiEventsProxyParamsStatusSuccess GetApiEventsProxyParamsStatus = "success"
)

// Valid indicates whether the value is a known member of the GetApiEventsProxyParamsStatus enum.
func (e GetApiEventsProxyParamsStatus) Valid() bool {
	switch e {
	case GetApiEventsProxyParamsStatusFailed:
		return true
	case GetApiEventsProxyParamsStatusSuccess:
		return true
	default:
		return false
	}
}

// Defines values for PutApiIntegrationsMspTenantsIdInviteJSONBodyValue.
const (
	PutApiIntegrationsMspTenantsIdInviteJSONBodyValueAccept  PutApiIntegrationsMspTenantsIdInviteJSONBodyValue = "accept"
	PutApiIntegrationsMspTenantsIdInviteJSONBodyValueDecline PutApiIntegrationsMspTenantsIdInviteJSONBodyValue = "decline"
)

// Valid indicates whether the value is a known member of the PutApiIntegrationsMspTenantsIdInviteJSONBodyValue enum.
func (e PutApiIntegrationsMspTenantsIdInviteJSONBodyValue) Valid() bool {
	switch e {
	case PutApiIntegrationsMspTenantsIdInviteJSONBodyValueAccept:
		return true
	case PutApiIntegrationsMspTenantsIdInviteJSONBodyValueDecline:
		return true
	default:
		return false
	}
}

// AccessRestrictions Connection-level access restrictions based on IP address or geography. Applies to both HTTP and L4 services.
type AccessRestrictions struct {
	// AllowedCidrs CIDR allowlist. If non-empty, only IPs matching these CIDRs are allowed.
	AllowedCidrs *[]string `json:"allowed_cidrs,omitempty"`

	// AllowedCountries ISO 3166-1 alpha-2 country codes to allow. If non-empty, only these countries are permitted.
	AllowedCountries *[]string `json:"allowed_countries,omitempty"`

	// BlockedCidrs CIDR blocklist. Connections from these CIDRs are rejected. Evaluated after allowed_cidrs.
	BlockedCidrs *[]string `json:"blocked_cidrs,omitempty"`

	// BlockedCountries ISO 3166-1 alpha-2 country codes to block.
	BlockedCountries *[]string `json:"blocked_countries,omitempty"`

	// CrowdsecMode CrowdSec IP reputation mode. Only available when the proxy cluster supports CrowdSec.
	CrowdsecMode *AccessRestrictionsCrowdsecMode `json:"crowdsec_mode,omitempty"`
}

// AccessRestrictionsCrowdsecMode CrowdSec IP reputation mode. Only available when the proxy cluster supports CrowdSec.
type AccessRestrictionsCrowdsecMode string

// AccessiblePeer defines model for AccessiblePeer.
type AccessiblePeer struct {
	// CityName Commonly used English name of the city
	CityName CityName `json:"city_name"`

	// Connected Peer to Management connection status
	Connected bool `json:"connected"`

	// CountryCode 2-letter ISO 3166-1 alpha-2 code that represents the country
	CountryCode CountryCode `json:"country_code"`

	// DnsLabel Peer's DNS label is the parsed peer name for domain resolution. It is used to form an FQDN by appending the account's domain to the peer label. e.g. peer-dns-label.netbird.cloud
	DnsLabel string `json:"dns_label"`

	// GeonameId Unique identifier from the GeoNames database for a specific geographical location.
	GeonameId int `json:"geoname_id"`

	// Id Peer ID
	Id string `json:"id"`

	// Ip Peer's IP address
	Ip string `json:"ip"`

	// Ipv6 Peer's IPv6 overlay address
	Ipv6 *string `json:"ipv6,omitempty"`

	// LastSeen Last time peer connected to Netbird's management service
	LastSeen time.Time `json:"last_seen"`

	// Name Peer's hostname
	Name string `json:"name"`

	// Os Peer's operating system and version
	Os string `json:"os"`

	// UserId User ID of the user that enrolled this peer
	UserId string `json:"user_id"`
}

// Account defines model for Account.
type Account struct {
	// CreatedAt Account creation date (UTC)
	CreatedAt time.Time `json:"created_at"`

	// CreatedBy Account creator
	CreatedBy string `json:"created_by"`

	// Domain Account domain
	Domain string `json:"domain"`

	// DomainCategory Account domain category
	DomainCategory string `json:"domain_category"`

	// Id Account ID
	Id         string            `json:"id"`
	Onboarding AccountOnboarding `json:"onboarding"`
	Settings   AccountSettings   `json:"settings"`
}

// AccountDashboardFeatures Per-account dashboard section visibility overrides. Omitted keys follow the default dashboard behavior.
type AccountDashboardFeatures struct {
	// AgentNetwork Controls the Agent Network menu for the account regardless of the deployment feature flag. When true the menu is shown, when false it is hidden, and when omitted the default behavior applies. Must be true when agent_network_only is enabled.
	AgentNetwork *bool `json:"agent_network,omitempty"`
}

// AccountExtraSettings defines model for AccountExtraSettings.
type AccountExtraSettings struct {
	// NetworkTrafficLogsEnabled Enables or disables network traffic logging. If enabled, all network traffic events from peers will be stored.
	NetworkTrafficLogsEnabled bool `json:"network_traffic_logs_enabled"`

	// NetworkTrafficLogsGroups Limits traffic logging to these groups. If unset all peers are enabled.
	NetworkTrafficLogsGroups []string `json:"network_traffic_logs_groups"`

	// NetworkTrafficPacketCounterEnabled Enables or disables network traffic packet counter. If enabled, network packets and their size will be counted and reported. (This can have an slight impact on performance)
	NetworkTrafficPacketCounterEnabled bool `json:"network_traffic_packet_counter_enabled"`

	// PeerApprovalEnabled (Cloud only) Enables or disables peer approval globally. If enabled, all peers added will be in pending state until approved by an admin.
	PeerApprovalEnabled bool `json:"peer_approval_enabled"`

	// UserApprovalRequired Enables manual approval for new users joining via domain matching. When enabled, users are blocked with pending approval status until explicitly approved by an admin.
	UserApprovalRequired bool `json:"user_approval_required"`
}

// AccountOnboarding defines model for AccountOnboarding.
type AccountOnboarding struct {
	// OnboardingFlowPending Indicates whether the account onboarding flow is pending
	OnboardingFlowPending bool `json:"onboarding_flow_pending"`

	// SignupFormPending Indicates whether the account signup form is pending
	SignupFormPending bool `json:"signup_form_pending"`
}

// AccountRequest defines model for AccountRequest.
type AccountRequest struct {
	Onboarding *AccountOnboarding `json:"onboarding,omitempty"`
	Settings   AccountSettings    `json:"settings"`
}

// AccountSettings defines model for AccountSettings.
type AccountSettings struct {
	// AgentNetworkOnly Limits the dashboard to the Agent Network surface for this account. Set for accounts created via netbird.ai signups and can be disabled later. Enabling this requires dashboard_features.agent_network to be true in the same request.
	AgentNetworkOnly *bool `json:"agent_network_only,omitempty"`

	// AutoUpdateAlways When true, updates are installed automatically in the background. When false, updates require user interaction from the UI.
	AutoUpdateAlways *bool `json:"auto_update_always,omitempty"`

	// AutoUpdateVersion Set Clients auto-update version. "latest", "disabled", or a specific version (e.g "0.50.1")
	AutoUpdateVersion *string `json:"auto_update_version,omitempty"`

	// DashboardFeatures Per-account dashboard section visibility overrides. Omitted keys follow the default dashboard behavior.
	DashboardFeatures *AccountDashboardFeatures `json:"dashboard_features,omitempty"`

	// DnsDomain Allows to define a custom dns domain for the account
	DnsDomain *string `json:"dns_domain,omitempty"`

	// EmbeddedIdpEnabled Indicates whether the embedded identity provider (Dex) is enabled for this account. This is a read-only field.
	EmbeddedIdpEnabled *bool                 `json:"embedded_idp_enabled,omitempty"`
	Extra              *AccountExtraSettings `json:"extra,omitempty"`

	// GroupsPropagationEnabled Allows propagate the new user auto groups to peers that belongs to the user
	GroupsPropagationEnabled *bool `json:"groups_propagation_enabled,omitempty"`

	// Ipv6EnabledGroups List of group IDs whose peers receive IPv6 overlay addresses. Peers not in any of these groups will not be allocated an IPv6 address. New accounts default to the All group.
	Ipv6EnabledGroups *[]string `json:"ipv6_enabled_groups,omitempty"`

	// JwtAllowGroups List of groups to which users are allowed access
	JwtAllowGroups *[]string `json:"jwt_allow_groups,omitempty"`

	// JwtGroupsClaimName Name of the claim from which we extract groups names to add it to account groups.
	JwtGroupsClaimName *string `json:"jwt_groups_claim_name,omitempty"`

	// JwtGroupsEnabled Allows extract groups from JWT claim and add it to account groups.
	JwtGroupsEnabled *bool `json:"jwt_groups_enabled,omitempty"`

	// LazyConnectionEnabled Enables or disables experimental lazy connection
	LazyConnectionEnabled *bool `json:"lazy_connection_enabled,omitempty"`

	// LocalAuthDisabled Indicates whether local (email/password) authentication is disabled. When true, users can only authenticate via external identity providers. This is a read-only field.
	LocalAuthDisabled *bool `json:"local_auth_disabled,omitempty"`

	// LocalMfaEnabled Enables or disables TOTP multi-factor authentication for local users. Only applicable when the embedded identity provider is enabled.
	LocalMfaEnabled *bool `json:"local_mfa_enabled,omitempty"`

	// MetricsPushEnabled Enables or disables client metrics push for all peers in the account
	MetricsPushEnabled *bool `json:"metrics_push_enabled,omitempty"`

	// NetworkRange Allows to define a custom network range for the account in CIDR format
	NetworkRange *string `json:"network_range,omitempty"`

	// NetworkRangeV6 Allows to define a custom IPv6 network range for the account in CIDR format.
	NetworkRangeV6 *string `json:"network_range_v6,omitempty"`

	// PeerExposeEnabled Enables or disables peer expose. If enabled, peers can expose local services through the reverse proxy using the CLI.
	PeerExposeEnabled bool `json:"peer_expose_enabled"`

	// PeerExposeGroups Limits which peer groups are allowed to expose services. If empty, all peers are allowed when peer expose is enabled.
	PeerExposeGroups []string `json:"peer_expose_groups"`

	// PeerInactivityExpiration Period of time of inactivity after which peer session expires (seconds).
	PeerInactivityExpiration int `json:"peer_inactivity_expiration"`

	// PeerInactivityExpirationEnabled Enables or disables peer inactivity expiration globally. After peer's session has expired the user has to log in (authenticate). Applies only to peers that were added by a user (interactive SSO login).
	PeerInactivityExpirationEnabled bool `json:"peer_inactivity_expiration_enabled"`

	// PeerLoginExpiration Period of time after which peer login expires (seconds).
	PeerLoginExpiration int `json:"peer_login_expiration"`

	// PeerLoginExpirationEnabled Enables or disables peer login expiration globally. After peer's login has expired the user has to log in (authenticate). Applies only to peers that were added by a user (interactive SSO login).
	PeerLoginExpirationEnabled bool `json:"peer_login_expiration_enabled"`

	// RegularUsersViewBlocked Allows blocking regular users from viewing parts of the system.
	RegularUsersViewBlocked bool `json:"regular_users_view_blocked"`

	// RoutingPeerDnsResolutionEnabled Enables or disables DNS resolution on the routing peers
	RoutingPeerDnsResolutionEnabled *bool `json:"routing_peer_dns_resolution_enabled,omitempty"`
}

// AgentNetworkAccessLog One per-request agent-network (LLM) access log entry with flattened, queryable LLM dimensions.
type AgentNetworkAccessLog struct {
	// CacheCostUsd Portion of cost_usd billed for prompt-cache usage.
	CacheCostUsd float64 `json:"cache_cost_usd"`

	// CacheCreationCostUsd Cost of the prompt-cache write tokens. Base component of cost_usd, and part of cache_cost_usd.
	CacheCreationCostUsd float64 `json:"cache_creation_cost_usd"`

	// CacheCreationTokens Input tokens written to the provider's prompt cache. Zero for providers without a cache-write bucket.
	CacheCreationTokens int64 `json:"cache_creation_tokens"`

	// CachedInputCostUsd Cost of the prompt-cache read tokens. Base component of cost_usd, and part of cache_cost_usd.
	CachedInputCostUsd float64 `json:"cached_input_cost_usd"`

	// CachedInputTokens Input tokens read from the provider's prompt cache. Additive to input_tokens for Anthropic-shape providers; a subset of input_tokens for OpenAI.
	CachedInputTokens int64 `json:"cached_input_tokens"`

	// CostUsd Estimated USD cost of the request.
	CostUsd float64 `json:"cost_usd"`

	// Decision Policy decision for the request (e.g. allow, deny).
	Decision *string `json:"decision,omitempty"`

	// DenyReason Raw deny reason code when the request was blocked (e.g. llm_policy.token_cap_exceeded).
	DenyReason *string `json:"deny_reason,omitempty"`

	// DurationMs Duration of the request in milliseconds.
	DurationMs int `json:"duration_ms"`

	// GroupIds NetBird group ids that authorised the request (the caller's groups intersected with the policy's source groups).
	GroupIds *[]string `json:"group_ids,omitempty"`

	// Host Upstream host the request was routed to. Empty when log collection is disabled.
	Host *string `json:"host,omitempty"`

	// Id Unique identifier for the access log entry.
	Id string `json:"id"`

	// InputCostUsd Cost of the non-cached input tokens. Base component of cost_usd.
	InputCostUsd float64 `json:"input_cost_usd"`

	// InputTokens Input (prompt) tokens consumed.
	InputTokens int64 `json:"input_tokens"`

	// Method HTTP method of the request.
	Method *string `json:"method,omitempty"`

	// Model Requested LLM model.
	Model *string `json:"model,omitempty"`

	// OutputCostUsd Cost of the output tokens. Base component of cost_usd.
	OutputCostUsd float64 `json:"output_cost_usd"`

	// OutputTokens Output (completion) tokens produced.
	OutputTokens int64 `json:"output_tokens"`

	// Path Request path. Empty when log collection is disabled.
	Path *string `json:"path,omitempty"`

	// Provider LLM provider vendor (e.g. openai, anthropic).
	Provider *string `json:"provider,omitempty"`

	// RequestPrompt Captured request prompt. Present only when prompt collection is enabled.
	RequestPrompt *string `json:"request_prompt,omitempty"`

	// ResolvedProviderId NetBird agent-network provider id that served the request.
	ResolvedProviderId *string `json:"resolved_provider_id,omitempty"`

	// ResponseCompletion Captured response completion. Present only when prompt collection is enabled.
	ResponseCompletion *string `json:"response_completion,omitempty"`

	// SelectedPolicyId Agent-network policy id that authorised (or denied) the request.
	SelectedPolicyId *string `json:"selected_policy_id,omitempty"`

	// ServiceId ID of the synthesised agent-network service that handled the request.
	ServiceId string `json:"service_id"`

	// SessionId Conversation / coding-session identifier that groups related requests. Sourced from the client's session marker (e.g. OpenAI Codex client_metadata.session_id, Claude Code metadata.user_id). Empty for clients that send none.
	SessionId *string `json:"session_id,omitempty"`

	// SourceIp Source IP of the request. Empty when log collection is disabled.
	SourceIp *string `json:"source_ip,omitempty"`

	// StatusCode HTTP status code returned upstream.
	StatusCode int `json:"status_code"`

	// Stream Whether the request was a streaming completion.
	Stream *bool `json:"stream,omitempty"`

	// Timestamp Timestamp when the request was made.
	Timestamp time.Time `json:"timestamp"`

	// TotalTokens Total tokens consumed, including prompt-cache tokens.
	TotalTokens int64 `json:"total_tokens"`

	// UserId NetBird user id of the authenticated caller, if applicable.
	UserId *string `json:"user_id,omitempty"`
}

// AgentNetworkAccessLogSession A session-grouped view of agent-network access logs — all requests sharing a session id (or a single session-less request) folded into one summary plus its ordered entries.
type AgentNetworkAccessLogSession struct {
	// CacheCostUsd Portion of cost_usd billed for prompt-cache usage across the session.
	CacheCostUsd float64 `json:"cache_cost_usd"`

	// CacheCreationCostUsd Total cost of prompt-cache write tokens across the session.
	CacheCreationCostUsd float64 `json:"cache_creation_cost_usd"`

	// CacheCreationTokens Total prompt-cache write tokens across the session.
	CacheCreationTokens int64 `json:"cache_creation_tokens"`

	// CachedInputCostUsd Total cost of prompt-cache read tokens across the session.
	CachedInputCostUsd float64 `json:"cached_input_cost_usd"`

	// CachedInputTokens Total prompt-cache read tokens across the session.
	CachedInputTokens int64 `json:"cached_input_tokens"`

	// CostUsd Total estimated USD cost across the session.
	CostUsd float64 `json:"cost_usd"`

	// Decision Session decision — "deny" if any request was denied, otherwise "allow".
	Decision string `json:"decision"`

	// EndedAt Timestamp of the session's latest request.
	EndedAt time.Time `json:"ended_at"`

	// Entries The session's access-log entries, oldest first.
	Entries []AgentNetworkAccessLog `json:"entries"`

	// GroupIds Union of the authorising group ids across the session's entries.
	GroupIds *[]string `json:"group_ids,omitempty"`

	// InputCostUsd Total cost of non-cached input tokens across the session.
	InputCostUsd float64 `json:"input_cost_usd"`

	// InputTokens Total input (prompt) tokens across the session.
	InputTokens int64 `json:"input_tokens"`

	// Models Distinct models seen in the session.
	Models *[]string `json:"models,omitempty"`

	// OutputCostUsd Total cost of output tokens across the session.
	OutputCostUsd float64 `json:"output_cost_usd"`

	// OutputTokens Total output (completion) tokens across the session.
	OutputTokens int64 `json:"output_tokens"`

	// Providers Distinct LLM provider vendors seen in the session.
	Providers *[]string `json:"providers,omitempty"`

	// RequestCount Number of requests in the session.
	RequestCount int `json:"request_count"`

	// SessionId Conversation / coding-session identifier shared by the entries. Empty for a session-less (singleton) request grouped on its own id.
	SessionId *string `json:"session_id,omitempty"`

	// StartedAt Timestamp of the session's earliest request.
	StartedAt time.Time `json:"started_at"`

	// TotalTokens Total tokens across the session, including prompt-cache tokens.
	TotalTokens int64 `json:"total_tokens"`

	// UserId NetBird user id of the session's caller.
	UserId *string `json:"user_id,omitempty"`
}

// AgentNetworkAccessLogSessionsResponse defines model for AgentNetworkAccessLogSessionsResponse.
type AgentNetworkAccessLogSessionsResponse struct {
	// Data List of session-grouped agent-network access logs.
	Data []AgentNetworkAccessLogSession `json:"data"`

	// Page Current page number.
	Page int `json:"page"`

	// PageSize Number of sessions per page.
	PageSize int `json:"page_size"`

	// TotalPages Total number of pages available.
	TotalPages int `json:"total_pages"`

	// TotalRecords Total number of sessions matching the filter.
	TotalRecords int `json:"total_records"`
}

// AgentNetworkAccessLogsResponse defines model for AgentNetworkAccessLogsResponse.
type AgentNetworkAccessLogsResponse struct {
	// Data List of agent-network access log entries.
	Data []AgentNetworkAccessLog `json:"data"`

	// Page Current page number.
	Page int `json:"page"`

	// PageSize Number of items per page.
	PageSize int `json:"page_size"`

	// TotalPages Total number of pages available.
	TotalPages int `json:"total_pages"`

	// TotalRecords Total number of log records matching the filter.
	TotalRecords int `json:"total_records"`
}

// AgentNetworkBudgetRule Account-level budget rule. A limit-only rule bound to groups and/or users that applies across all policies as a min-wins ceiling. Empty targets means it applies to every caller.
type AgentNetworkBudgetRule struct {
	CreatedAt *time.Time `json:"created_at,omitempty"`

	// Enabled Whether the rule is enforced.
	Enabled bool `json:"enabled"`

	// Id Budget rule ID.
	Id string `json:"id"`

	// Limits Token and budget caps attached directly to the policy. These compose with any guardrail-level checks.
	Limits AgentNetworkPolicyLimits `json:"limits"`

	// Name Display name for the budget rule.
	Name string `json:"name"`

	// TargetGroups NetBird group ids the rule binds. Empty plus empty target_users means account-wide.
	TargetGroups []string `json:"target_groups"`

	// TargetUsers NetBird user ids the rule binds directly.
	TargetUsers []string   `json:"target_users"`
	UpdatedAt   *time.Time `json:"updated_at,omitempty"`
}

// AgentNetworkBudgetRuleRequest defines model for AgentNetworkBudgetRuleRequest.
type AgentNetworkBudgetRuleRequest struct {
	// Enabled Whether the rule is enforced. Defaults to true on create.
	Enabled *bool `json:"enabled,omitempty"`

	// Limits Token and budget caps attached directly to the policy. These compose with any guardrail-level checks.
	Limits AgentNetworkPolicyLimits `json:"limits"`

	// Name Display name for the budget rule.
	Name string `json:"name"`

	// TargetGroups NetBird group ids the rule binds. Empty plus empty target_users means account-wide.
	TargetGroups *[]string `json:"target_groups,omitempty"`

	// TargetUsers NetBird user ids the rule binds directly.
	TargetUsers *[]string `json:"target_users,omitempty"`
}

// AgentNetworkCatalogExtraHeader One optional per-provider routing/config header surfaced on the dashboard. Operator-typed value lives on the provider record's `extra_values` map keyed by `name`. UI copy (input label, helper line, tooltip) is owned by the dashboard, keyed by `name`.
type AgentNetworkCatalogExtraHeader struct {
	// Name Wire header name the proxy stamps with the operator-typed value.
	Name string `json:"name"`
}

// AgentNetworkCatalogHeaderPairInjection HeaderPair identity-injection shape — separate per-dimension headers (LiteLLM-style, Bifrost).
type AgentNetworkCatalogHeaderPairInjection struct {
	// Customizable When true, the wire header names are operator-overridable per provider record (Bifrost). When false, the catalog values are authoritative (LiteLLM and similar gateways with a fixed wire protocol).
	Customizable bool `json:"customizable"`

	// EndUserIdHeader Wire header name for the caller's display identity. Default placeholder when `customizable` is true.
	EndUserIdHeader string `json:"end_user_id_header"`

	// TagsHeader Wire header name for the caller's groups CSV. Default placeholder when `customizable` is true.
	TagsHeader string `json:"tags_header"`
}

// AgentNetworkCatalogIdentityInjection Catalog-declared identity-injection shape. Present when this provider supports stamping the caller's NetBird identity onto upstream requests. Exactly one of `header_pair` or `json_metadata` is set per provider entry. The dashboard reads the `customizable` flag on whichever shape is present to decide whether to surface the labels as editable inputs (true → editable with the catalog values shown as placeholders; false → fixed and read-only).
type AgentNetworkCatalogIdentityInjection struct {
	// HeaderPair HeaderPair identity-injection shape — separate per-dimension headers (LiteLLM-style, Bifrost).
	HeaderPair *AgentNetworkCatalogHeaderPairInjection `json:"header_pair,omitempty"`

	// JsonMetadata JSONMetadata identity-injection shape — one wire header carrying a JSON object whose keys label each dimension (Portkey-style, Cloudflare AI Gateway).
	JsonMetadata *AgentNetworkCatalogJSONMetadataInjection `json:"json_metadata,omitempty"`
}

// AgentNetworkCatalogJSONMetadataInjection JSONMetadata identity-injection shape — one wire header carrying a JSON object whose keys label each dimension (Portkey-style, Cloudflare AI Gateway).
type AgentNetworkCatalogJSONMetadataInjection struct {
	// Customizable When true, the JSON keys are operator-overridable per provider record (Cloudflare). The wire header itself stays catalog-owned. When false, the catalog values are authoritative (Portkey and similar gateways with a fixed JSON schema).
	Customizable bool `json:"customizable"`

	// GroupsKey JSON key for the caller's groups CSV. Default placeholder when `customizable` is true.
	GroupsKey string `json:"groups_key"`

	// Header Wire header name carrying the JSON metadata payload. Catalog-owned (not customizable per provider record).
	Header string `json:"header"`

	// UserKey JSON key for the caller's display identity. Default placeholder when `customizable` is true.
	UserKey string `json:"user_key"`
}

// AgentNetworkCatalogModel defines model for AgentNetworkCatalogModel.
type AgentNetworkCatalogModel struct {
	// CacheCreationPer1k Anthropic-shape cache rate — default cost per 1k cache-creation tokens (additive to input tokens), in USD. Absent when the model has no cache-creation rate.
	CacheCreationPer1k *float64 `json:"cache_creation_per_1k,omitempty"`

	// CacheReadPer1k Anthropic-shape cache rate — default cost per 1k cache-read tokens (additive to input tokens), in USD. Absent when the model has no cache-read rate.
	CacheReadPer1k *float64 `json:"cache_read_per_1k,omitempty"`

	// CachedInputPer1k OpenAI-shape cache rate — default cost per 1k cached prompt tokens (a subset of input tokens), in USD. Absent when the model has no cached-input discount.
	CachedInputPer1k *float64 `json:"cached_input_per_1k,omitempty"`

	// ContextWindow Maximum context window in tokens.
	ContextWindow int `json:"context_window"`

	// Id Catalog model identifier as exposed by the upstream provider.
	Id string `json:"id"`

	// InputPer1k Input token price per 1k tokens, in USD.
	InputPer1k float64 `json:"input_per_1k"`

	// Label Human-friendly model name for the dashboard.
	Label string `json:"label"`

	// OutputPer1k Output token price per 1k tokens, in USD.
	OutputPer1k float64 `json:"output_per_1k"`
}

// AgentNetworkCatalogProvider defines model for AgentNetworkCatalogProvider.
type AgentNetworkCatalogProvider struct {
	// AuthHeaderTemplate Template the proxy uses to inject the API key (the literal string ${API_KEY} is replaced at request time).
	AuthHeaderTemplate string `json:"auth_header_template"`

	// BrandColor Hex brand color used to render the provider badge in the dashboard.
	BrandColor string `json:"brand_color"`

	// DefaultContentType Default Content-Type for upstream requests.
	DefaultContentType string `json:"default_content_type"`

	// DefaultHost Default upstream host suggested when adding a provider of this type.
	DefaultHost string `json:"default_host"`

	// Description Short description shown in the provider picker.
	Description string `json:"description"`

	// ExtraHeaders Catalog-declared list of optional per-provider routing/config headers the proxy stamps on every upstream request. Each entry surfaces an input on the dashboard's provider modal (one per item, labeled with `label`). Operators fill any subset; values land on the provider record's `extra_values` map keyed by `name`. Used by gateways like Portkey for `x-portkey-config: pc-...` (saved-config id resolving upstream provider + virtual key).
	ExtraHeaders *[]AgentNetworkCatalogExtraHeader `json:"extra_headers,omitempty"`

	// Id Catalog provider identifier (referenced by AgentNetworkProvider.provider_id).
	Id string `json:"id"`

	// IdentityInjection Catalog-declared identity-injection shape. Present when this provider supports stamping the caller's NetBird identity onto upstream requests. Exactly one of `header_pair` or `json_metadata` is set per provider entry. The dashboard reads the `customizable` flag on whichever shape is present to decide whether to surface the labels as editable inputs (true → editable with the catalog values shown as placeholders; false → fixed and read-only).
	IdentityInjection *AgentNetworkCatalogIdentityInjection `json:"identity_injection,omitempty"`

	// Kind Presentation grouping for the provider Select on the dashboard.
	// "provider" — first-party vendor API (OpenAI, Anthropic, …); the upstream is the model itself.
	// "gateway" — routing/aggregation layer in front of multiple providers (LiteLLM, Portkey, …); typically pairs with NetBird identity stamping.
	// "custom" — generic OpenAI-compatible self-hosted endpoint catch-all.
	Kind AgentNetworkCatalogProviderKind `json:"kind"`

	// Models Catalog models available for this provider.
	Models []AgentNetworkCatalogModel `json:"models"`

	// Name Display name for the provider.
	Name string `json:"name"`

	// PricingSurfaces Cost-meter pricing surfaces this provider's traffic is metered under ("openai", "anthropic", "bedrock"). Tells the dashboard which cache-rate fields apply to this provider's models: "openai" → cached_input_per_1k (cached prompt tokens are a subset of input); "anthropic"/"bedrock" → cache_read_per_1k + cache_creation_per_1k (additive buckets). Absent/empty for gateway and custom entries, whose upstream shape NetBird cannot know ahead of time — surface all cache fields for those.
	PricingSurfaces *[]string `json:"pricing_surfaces,omitempty"`
}

// AgentNetworkCatalogProviderKind Presentation grouping for the provider Select on the dashboard.
// "provider" — first-party vendor API (OpenAI, Anthropic, …); the upstream is the model itself.
// "gateway" — routing/aggregation layer in front of multiple providers (LiteLLM, Portkey, …); typically pairs with NetBird identity stamping.
// "custom" — generic OpenAI-compatible self-hosted endpoint catch-all.
type AgentNetworkCatalogProviderKind string

// AgentNetworkConsumption One per-(dimension, window) consumption counter row. The proxy ticks one row per dimension on every served LLM request; the dashboard reads this listing to surface live counter growth.
type AgentNetworkConsumption struct {
	// CostUsd Total USD spend booked against this dimension for the window.
	CostUsd float64 `json:"cost_usd"`

	// DimensionId NetBird user id (when `dimension_kind=user`) or NetBird group id (when `dimension_kind=group`).
	DimensionId string `json:"dimension_id"`

	// DimensionKind Whether this row counts a single end user or a single source group across every member.
	DimensionKind AgentNetworkConsumptionDimensionKind `json:"dimension_kind"`

	// TokensInput Total input tokens consumed within the window.
	TokensInput int64 `json:"tokens_input"`

	// TokensOutput Total output tokens consumed within the window.
	TokensOutput int64 `json:"tokens_output"`

	// UpdatedAt Timestamp of the last increment recorded for this row.
	UpdatedAt *time.Time `json:"updated_at,omitempty"`

	// WindowSeconds Length of the aligned window this counter covers, in seconds. Distinct window lengths produce independent counters even on the same dimension.
	WindowSeconds int64 `json:"window_seconds"`

	// WindowStartUtc UTC start of the aligned window this counter covers. Aligned to the unix epoch so every node computes the same boundary.
	WindowStartUtc time.Time `json:"window_start_utc"`
}

// AgentNetworkConsumptionDimensionKind Whether this row counts a single end user or a single source group across every member.
type AgentNetworkConsumptionDimensionKind string

// AgentNetworkGuardrail defines model for AgentNetworkGuardrail.
type AgentNetworkGuardrail struct {
	// Checks Guardrail check parameters. Each entry has an `enabled` flag plus per-check configuration; disabled entries are inert.
	Checks AgentNetworkGuardrailChecks `json:"checks"`

	// CreatedAt Timestamp when the guardrail was created.
	CreatedAt *time.Time `json:"created_at,omitempty"`

	// Description Optional human-readable description.
	Description string `json:"description"`

	// Id Guardrail ID
	Id string `json:"id"`

	// Name Display name for the guardrail.
	Name string `json:"name"`

	// UpdatedAt Timestamp when the guardrail was last updated.
	UpdatedAt *time.Time `json:"updated_at,omitempty"`
}

// AgentNetworkGuardrailChecks Guardrail check parameters. Each entry has an `enabled` flag plus per-check configuration; disabled entries are inert.
type AgentNetworkGuardrailChecks struct {
	ModelAllowlist struct {
		Enabled bool `json:"enabled"`

		// Models Allowed catalog model ids. Requests for any other model are denied.
		Models []string `json:"models"`
	} `json:"model_allowlist"`
	PromptCapture struct {
		Enabled   bool `json:"enabled"`
		RedactPii bool `json:"redact_pii"`
	} `json:"prompt_capture"`
}

// AgentNetworkGuardrailRequest defines model for AgentNetworkGuardrailRequest.
type AgentNetworkGuardrailRequest struct {
	// Checks Guardrail check parameters. Each entry has an `enabled` flag plus per-check configuration; disabled entries are inert.
	Checks AgentNetworkGuardrailChecks `json:"checks"`

	// Description Optional human-readable description.
	Description *string `json:"description,omitempty"`

	// Name Display name for the guardrail.
	Name string `json:"name"`
}

// AgentNetworkPolicy defines model for AgentNetworkPolicy.
type AgentNetworkPolicy struct {
	// CreatedAt Timestamp when the policy was created.
	CreatedAt *time.Time `json:"created_at,omitempty"`

	// Description Optional human-readable description.
	Description string `json:"description"`

	// DestinationProviderIds Agent Network provider ids (returned by the providers API) the source groups can reach.
	DestinationProviderIds []string `json:"destination_provider_ids"`

	// Enabled Whether the policy is enabled.
	Enabled bool `json:"enabled"`

	// GuardrailIds Agent Network guardrail ids attached to this policy.
	GuardrailIds []string `json:"guardrail_ids"`

	// Id Policy ID
	Id string `json:"id"`

	// Limits Token and budget caps attached directly to the policy. These compose with any guardrail-level checks.
	Limits AgentNetworkPolicyLimits `json:"limits"`

	// Name Display name for the policy.
	Name string `json:"name"`

	// SourceGroups NetBird group ids whose members are allowed to call the destination providers.
	SourceGroups []string `json:"source_groups"`

	// UpdatedAt Timestamp when the policy was last updated.
	UpdatedAt *time.Time `json:"updated_at,omitempty"`
}

// AgentNetworkPolicyBudgetLimit Per-policy USD spend cap. `group_cap_usd` is applied to each source group independently — every group in the policy's `source_groups` gets its own bucket of this size. `user_cap_usd` is applied independently to each individual user. Caps reset to zero at the start of each window.
type AgentNetworkPolicyBudgetLimit struct {
	Enabled bool `json:"enabled"`

	// GroupCapUsd USD allowed per source group within the window (each group has its own bucket of this size). 0 means uncapped.
	GroupCapUsd float64 `json:"group_cap_usd"`

	// UserCapUsd USD allowed per individual user within the window. 0 means uncapped.
	UserCapUsd float64 `json:"user_cap_usd"`

	// WindowSeconds Reset frequency in seconds. Caps reset at the start of each window. Minimum 60 (one minute) when the limit is enabled.
	WindowSeconds int64 `json:"window_seconds"`
}

// AgentNetworkPolicyLimits Token and budget caps attached directly to the policy. These compose with any guardrail-level checks.
type AgentNetworkPolicyLimits struct {
	// BudgetLimit Per-policy USD spend cap. `group_cap_usd` is applied to each source group independently — every group in the policy's `source_groups` gets its own bucket of this size. `user_cap_usd` is applied independently to each individual user. Caps reset to zero at the start of each window.
	BudgetLimit AgentNetworkPolicyBudgetLimit `json:"budget_limit"`

	// TokenLimit Per-policy token cap. `group_cap` is applied to each source group independently — every group in the policy's `source_groups` gets its own bucket of this size. `user_cap` is applied independently to each individual user. Caps reset to zero at the start of each window.
	TokenLimit AgentNetworkPolicyTokenLimit `json:"token_limit"`
}

// AgentNetworkPolicyRequest defines model for AgentNetworkPolicyRequest.
type AgentNetworkPolicyRequest struct {
	// Description Optional human-readable description.
	Description *string `json:"description,omitempty"`

	// DestinationProviderIds Agent Network provider ids the source groups can reach.
	DestinationProviderIds []string `json:"destination_provider_ids"`

	// Enabled Whether the policy is enabled. Defaults to true on create.
	Enabled *bool `json:"enabled,omitempty"`

	// GuardrailIds Agent Network guardrail ids to attach to this policy.
	GuardrailIds *[]string `json:"guardrail_ids,omitempty"`

	// Limits Token and budget caps attached directly to the policy. These compose with any guardrail-level checks.
	Limits *AgentNetworkPolicyLimits `json:"limits,omitempty"`

	// Name Display name for the policy.
	Name string `json:"name"`

	// SourceGroups NetBird group ids whose members are allowed to call the destination providers.
	SourceGroups []string `json:"source_groups"`
}

// AgentNetworkPolicyTokenLimit Per-policy token cap. `group_cap` is applied to each source group independently — every group in the policy's `source_groups` gets its own bucket of this size. `user_cap` is applied independently to each individual user. Caps reset to zero at the start of each window.
type AgentNetworkPolicyTokenLimit struct {
	Enabled bool `json:"enabled"`

	// GroupCap Tokens allowed per source group within the window (each group has its own bucket of this size). 0 means uncapped.
	GroupCap int64 `json:"group_cap"`

	// UserCap Tokens allowed per individual user within the window. 0 means uncapped.
	UserCap int64 `json:"user_cap"`

	// WindowSeconds Reset frequency in seconds. The cap counter resets to zero at the start of each window. Minimum 60 (one minute) when the limit is enabled.
	WindowSeconds int64 `json:"window_seconds"`
}

// AgentNetworkProvider defines model for AgentNetworkProvider.
type AgentNetworkProvider struct {
	// CreatedAt Timestamp when the provider was created.
	CreatedAt *time.Time `json:"created_at,omitempty"`

	// Enabled Whether the provider is enabled.
	Enabled bool `json:"enabled"`

	// ExtraValues Operator-typed values for catalog-declared extra headers. Keys are wire header names (e.g. `x-portkey-config`); values are the strings the proxy stamps on every upstream request to this provider. Catalog (AgentNetworkCatalogProvider.extra_headers) declares which keys are accepted; values not declared by the catalog are ignored at synth time. Empty / missing values mean no header stamped.
	ExtraValues *map[string]string `json:"extra_values,omitempty"`

	// Id Provider ID
	Id string `json:"id"`

	// IdentityHeaderGroups Wire header name the proxy stamps with the caller's NetBird groups as a comma-separated list (sorted) when the catalog entry's HeaderPair is `customizable`. Always present in responses; empty disables stamping for this dimension. Same per-catalog semantics as `identity_header_user_id`.
	IdentityHeaderGroups string `json:"identity_header_groups"`

	// IdentityHeaderUserId Wire header name the proxy stamps with the caller's display identity (user email or peer name) when the catalog entry's HeaderPair is `customizable`. Always present in responses; empty disables stamping for this dimension. Ignored when the catalog entry has a fixed HeaderPair (e.g. LiteLLM, Portkey). Used today by Bifrost: typical values are `x-bf-lh-netbird_user_id` (always-on log metadata) or `x-bf-dim-netbird_user_id` (Prometheus / OTEL — requires the label to be pre-declared in the gateway's `client.prometheus_labels` config).
	IdentityHeaderUserId string `json:"identity_header_user_id"`

	// MetadataDisabled Whether identity metadata injection is disabled for this provider. When enabled (the default), the proxy stamps the caller's user and authorizing group onto upstream requests as provider-specific metadata (e.g. AWS Bedrock's X-Amzn-Bedrock-Request-Metadata header). Set true to suppress it.
	MetadataDisabled bool `json:"metadata_disabled"`

	// Models Models exposed through this endpoint, with the operator's per-1k input/output prices. Empty means all catalog models are allowed at catalog prices.
	Models []AgentNetworkProviderModel `json:"models"`

	// Name Display name shown in the dashboard.
	Name string `json:"name"`

	// ProviderId Catalog identifier for the upstream AI provider (e.g. openai_api, anthropic_api, azure_openai_api, bedrock_api, vertex_ai_api, mistral_api, custom).
	ProviderId string `json:"provider_id"`

	// SkipTlsVerification Whether upstream TLS certificate verification is skipped when the proxy dials this provider's URL. Intended for self-hosted / internal gateways behind a private or self-signed certificate.
	SkipTlsVerification bool `json:"skip_tls_verification"`

	// UpdatedAt Timestamp when the provider was last updated.
	UpdatedAt *time.Time `json:"updated_at,omitempty"`

	// UpstreamUrl Full upstream URL (with scheme) that NetBird forwards traffic to.
	UpstreamUrl string `json:"upstream_url"`
}

// AgentNetworkProviderModel A model exposed by the provider, with the operator's per-1k input/output prices in USD.
type AgentNetworkProviderModel struct {
	// CacheCreationPer1k Anthropic-shape cache rate — cost per 1k cache-creation tokens (additive to input tokens), in USD. Omitted means inherit NetBird's default rate for this model when one exists; 0 means cache writes bill at input_per_1k.
	CacheCreationPer1k *float64 `json:"cache_creation_per_1k,omitempty"`

	// CacheReadPer1k Anthropic-shape cache rate — cost per 1k cache-read tokens (additive to input tokens), in USD. Omitted means inherit NetBird's default rate for this model when one exists; 0 means cache reads bill at input_per_1k.
	CacheReadPer1k *float64 `json:"cache_read_per_1k,omitempty"`

	// CachedInputPer1k OpenAI-shape cache rate — cost per 1k cached prompt tokens (a subset of input tokens), in USD. Omitted means inherit NetBird's default rate for this model when one exists; 0 means no discount (cached tokens bill at input_per_1k).
	CachedInputPer1k *float64 `json:"cached_input_per_1k,omitempty"`

	// Id Model identifier (e.g. "gpt-4o-mini").
	Id string `json:"id"`

	// InputPer1k Cost per 1k input tokens, in USD.
	InputPer1k float64 `json:"input_per_1k"`

	// OutputPer1k Cost per 1k output tokens, in USD.
	OutputPer1k float64 `json:"output_per_1k"`
}

// AgentNetworkProviderRequest defines model for AgentNetworkProviderRequest.
type AgentNetworkProviderRequest struct {
	// ApiKey Upstream provider API key. Sealed at rest on the management server and never returned in responses. Required on create; optional on update (omit to keep the existing key).
	ApiKey *string `json:"api_key,omitempty"`

	// BootstrapCluster Proxy cluster used to bootstrap the per-account agent-network endpoint when the first provider is created. Ignored on subsequent creates and on updates because the cluster is pinned on the account-level Settings row.
	BootstrapCluster *string `json:"bootstrap_cluster,omitempty"`

	// Enabled Whether the provider is enabled. Defaults to true on create.
	Enabled *bool `json:"enabled,omitempty"`

	// ExtraValues Operator-typed values for catalog-declared extra headers (see AgentNetworkProvider.extra_values). The request's map replaces the stored values; empty strings drop the corresponding key.
	ExtraValues *map[string]string `json:"extra_values,omitempty"`

	// IdentityHeaderGroups Wire header name for the caller's groups CSV. See AgentNetworkProvider.identity_header_groups. Same semantics as `identity_header_user_id`.
	IdentityHeaderGroups *string `json:"identity_header_groups,omitempty"`

	// IdentityHeaderUserId Wire header name for the caller's display identity. See AgentNetworkProvider.identity_header_user_id. Empty or omitted disables stamping for this dimension.
	IdentityHeaderUserId *string `json:"identity_header_user_id,omitempty"`

	// MetadataDisabled Disable identity metadata injection (the caller's user + authorizing group) for this provider. Defaults to false (metadata is injected).
	MetadataDisabled *bool `json:"metadata_disabled,omitempty"`

	// Models Models exposed through this endpoint, with the operator's per-1k input/output prices. Empty means all catalog models are allowed at catalog prices.
	Models *[]AgentNetworkProviderModel `json:"models,omitempty"`

	// Name Display name for the provider.
	Name string `json:"name"`

	// ProviderId Catalog identifier for the upstream AI provider (e.g. openai_api, anthropic_api, azure_openai_api, bedrock_api, vertex_ai_api, mistral_api, custom).
	ProviderId string `json:"provider_id"`

	// SkipTlsVerification Skip upstream TLS certificate verification when the proxy dials this provider's URL. For self-hosted / internal gateways behind a private or self-signed certificate. Defaults to false.
	SkipTlsVerification *bool `json:"skip_tls_verification,omitempty"`

	// UpstreamUrl Full upstream URL (with scheme) that NetBird forwards traffic to.
	UpstreamUrl string `json:"upstream_url"`
}

// AgentNetworkSettings Per-account Agent Network gateway settings. One row per account; cluster and subdomain are assigned at bootstrap and immutable thereafter. Before bootstrap the account reads as the default values with empty cluster, subdomain and endpoint.
type AgentNetworkSettings struct {
	// AccessLogRetentionDays Days to retain full access-log rows; older rows are swept. 0 or less means keep indefinitely. Usage records are retained independently.
	AccessLogRetentionDays *int `json:"access_log_retention_days,omitempty"`

	// Cluster Address of the NetBird proxy cluster fronting this account's agent-network endpoint. Empty until the account is bootstrapped.
	Cluster string `json:"cluster"`

	// CreatedAt Timestamp when the settings row was created. Absent until the account is bootstrapped.
	CreatedAt *time.Time `json:"created_at,omitempty"`

	// EnableLogCollection Whether per-request access-log entries are collected for this account's agent-network traffic.
	EnableLogCollection bool `json:"enable_log_collection"`

	// EnablePromptCollection Master switch for request/response prompt capture. Capture runs only when this is on AND a policy guardrail also enables it.
	EnablePromptCollection bool `json:"enable_prompt_collection"`

	// Endpoint Bare hostname agents call for this account, computed as `<subdomain>.<cluster>`. Empty until the account is bootstrapped.
	Endpoint string `json:"endpoint"`

	// RedactPii Whether captured prompts have PII redacted. Effective redaction is the OR of this and any policy guardrail's redact setting.
	RedactPii bool `json:"redact_pii"`

	// Subdomain Auto-generated DNS-safe label that prefixes the cluster to form the agent-network endpoint. Empty until the account is bootstrapped.
	Subdomain string `json:"subdomain"`

	// UpdatedAt Timestamp when the settings row was last updated. Absent until the account is bootstrapped.
	UpdatedAt *time.Time `json:"updated_at,omitempty"`
}

// AgentNetworkSettingsRequest Account-level Agent Network settings update. The request replaces every mutable field. `cluster` additionally bootstraps the per-account settings row when the account does not have one yet; the subdomain is always server-assigned.
type AgentNetworkSettingsRequest struct {
	// AccessLogRetentionDays Days to retain full access-log rows; older rows are swept. 0 or less means keep indefinitely.
	AccessLogRetentionDays *int `json:"access_log_retention_days,omitempty"`

	// Cluster Address of the NetBird proxy cluster fronting this account's agent-network endpoint. When the account has no settings row yet, providing it bootstraps the row (assigning the subdomain that forms the agent endpoint). The cluster is immutable once assigned — later updates must omit it or send the assigned value; any other value is rejected.
	Cluster *string `json:"cluster,omitempty"`

	// EnableLogCollection Whether per-request access-log entries are collected for this account's agent-network traffic.
	EnableLogCollection bool `json:"enable_log_collection"`

	// EnablePromptCollection Master switch for request/response prompt capture.
	EnablePromptCollection bool `json:"enable_prompt_collection"`

	// RedactPii Whether captured prompts have PII redacted.
	RedactPii bool `json:"redact_pii"`
}

// AgentNetworkUsageBucket One aggregated agent-network usage time bucket (UTC). The bucket width is set by the request's granularity.
type AgentNetworkUsageBucket struct {
	// CacheCostUsd Portion of cost_usd billed for prompt-cache usage in the bucket.
	CacheCostUsd float64 `json:"cache_cost_usd"`

	// CacheCreationCostUsd Total cost of prompt-cache write tokens in the bucket.
	CacheCreationCostUsd float64 `json:"cache_creation_cost_usd"`

	// CacheCreationTokens Total prompt-cache write tokens in the bucket.
	CacheCreationTokens int64 `json:"cache_creation_tokens"`

	// CachedInputCostUsd Total cost of prompt-cache read tokens in the bucket.
	CachedInputCostUsd float64 `json:"cached_input_cost_usd"`

	// CachedInputTokens Total prompt-cache read tokens in the bucket.
	CachedInputTokens int64 `json:"cached_input_tokens"`

	// CostUsd Total estimated USD spend in the bucket.
	CostUsd float64 `json:"cost_usd"`

	// InputCostUsd Total cost of non-cached input tokens in the bucket.
	InputCostUsd float64 `json:"input_cost_usd"`

	// InputTokens Total input (prompt) tokens in the bucket.
	InputTokens int64 `json:"input_tokens"`

	// OutputCostUsd Total cost of output tokens in the bucket.
	OutputCostUsd float64 `json:"output_cost_usd"`

	// OutputTokens Total output (completion) tokens in the bucket.
	OutputTokens int64 `json:"output_tokens"`

	// PeriodStart Start of the bucket in YYYY-MM-DD (UTC) — the day, the week start (Monday), or the month start, depending on granularity.
	PeriodStart string `json:"period_start"`

	// TotalTokens Total tokens in the bucket, including prompt-cache tokens.
	TotalTokens int64 `json:"total_tokens"`
}

// AvailablePorts defines model for AvailablePorts.
type AvailablePorts struct {
	// Tcp Number of available TCP  ports left on the ingress peer
	Tcp int `json:"tcp"`

	// Udp Number of available UDP ports left on the ingress peer
	Udp int `json:"udp"`
}

// AzureIntegration defines model for AzureIntegration.
type AzureIntegration struct {
	// ClientId Azure AD application (client) ID
	ClientId string `json:"client_id"`

	// ConnectorId DEX connector ID for embedded IDP setups
	ConnectorId *string `json:"connector_id,omitempty"`

	// Enabled Whether the integration is enabled
	Enabled bool `json:"enabled"`

	// GroupPrefixes List of start_with string patterns for groups to sync
	GroupPrefixes []string `json:"group_prefixes"`

	// Host Azure host domain for the Graph API
	Host string `json:"host"`

	// Id The unique identifier for the integration
	Id int64 `json:"id"`

	// LastSyncedAt Timestamp of the last synchronization
	LastSyncedAt time.Time `json:"last_synced_at"`

	// SyncInterval Sync interval in seconds
	SyncInterval int `json:"sync_interval"`

	// TenantId Azure AD tenant ID
	TenantId string `json:"tenant_id"`

	// UserGroupPrefixes List of start_with string patterns for groups which users to sync
	UserGroupPrefixes []string `json:"user_group_prefixes"`
}

// BearerAuthConfig defines model for BearerAuthConfig.
type BearerAuthConfig struct {
	// DistributionGroups List of group IDs that can use bearer auth
	DistributionGroups *[]string `json:"distribution_groups,omitempty"`

	// Enabled Whether bearer auth is enabled
	Enabled bool `json:"enabled"`
}

// BundleParameters These parameters control what gets included in the bundle and how it is processed.
type BundleParameters struct {
	// Anonymize Whether sensitive data should be anonymized in the bundle.
	Anonymize bool `json:"anonymize"`

	// BundleFor Whether to generate a bundle for the given timeframe.
	BundleFor bool `json:"bundle_for"`

	// BundleForTime Time period in minutes for which to generate the bundle.
	BundleForTime int `json:"bundle_for_time"`

	// LogFileCount Maximum number of log files to include in the bundle.
	LogFileCount int `json:"log_file_count"`
}

// BundleResult defines model for BundleResult.
type BundleResult struct {
	UploadKey *string `json:"upload_key,omitempty"`
}

// BundleWorkloadRequest defines model for BundleWorkloadRequest.
type BundleWorkloadRequest struct {
	// Parameters These parameters control what gets included in the bundle and how it is processed.
	Parameters BundleParameters `json:"parameters"`

	// Type Identifies the type of workload the job will execute.
	// Currently only `"bundle"` is supported.
	Type WorkloadType `json:"type"`
}

// BundleWorkloadResponse defines model for BundleWorkloadResponse.
type BundleWorkloadResponse struct {
	// Parameters These parameters control what gets included in the bundle and how it is processed.
	Parameters BundleParameters `json:"parameters"`
	Result     BundleResult     `json:"result"`

	// Type Identifies the type of workload the job will execute.
	// Currently only `"bundle"` is supported.
	Type WorkloadType `json:"type"`
}

// BypassResponse Response for bypassed peer operations.
type BypassResponse struct {
	// PeerId The ID of the bypassed peer.
	PeerId string `json:"peer_id"`
}

// CheckoutResponse defines model for CheckoutResponse.
type CheckoutResponse struct {
	// SessionId The unique identifier for the checkout session.
	SessionId string `json:"session_id"`

	// Url URL to redirect the user to the checkout session.
	Url string `json:"url"`
}

// Checks List of objects that perform the actual checks
type Checks struct {
	// GeoLocationCheck Posture check for geo location
	GeoLocationCheck *GeoLocationCheck `json:"geo_location_check,omitempty"`

	// NbVersionCheck Posture check for the version of operating system
	NbVersionCheck *NBVersionCheck `json:"nb_version_check,omitempty"`

	// OsVersionCheck Posture check for the version of operating system
	OsVersionCheck *OSVersionCheck `json:"os_version_check,omitempty"`

	// PeerNetworkRangeCheck Posture check for allow or deny access based on the peer's IP addresses. A range matches when it
	// contains any of the peer's local network interface IPs or its public connection (NAT egress) IP,
	// so ranges may target private subnets, public CIDRs, or single hosts via a /32 or /128.
	PeerNetworkRangeCheck *PeerNetworkRangeCheck `json:"peer_network_range_check,omitempty"`

	// ProcessCheck Posture Check for binaries exist and are running in the peer’s system
	ProcessCheck *ProcessCheck `json:"process_check,omitempty"`
}

// City Describe city geographical location information
type City struct {
	// CityName Commonly used English name of the city
	CityName string `json:"city_name"`

	// GeonameId Integer ID of the record in GeoNames database
	GeonameId int `json:"geoname_id"`
}

// CityName Commonly used English name of the city
type CityName = string

// Country Describe country geographical location information
type Country struct {
	// CountryCode 2-letter ISO 3166-1 alpha-2 code that represents the country
	CountryCode CountryCode `json:"country_code"`

	// CountryName Commonly used English name of the country
	CountryName string `json:"country_name"`
}

// CountryCode 2-letter ISO 3166-1 alpha-2 code that represents the country
type CountryCode = string

// CreateAzureIntegrationRequest defines model for CreateAzureIntegrationRequest.
type CreateAzureIntegrationRequest struct {
	// ClientId Azure AD application (client) ID
	ClientId string `json:"client_id"`

	// ClientSecret Base64-encoded Azure AD client secret
	ClientSecret string `json:"client_secret"`

	// ConnectorId DEX connector ID for embedded IDP setups
	ConnectorId *string `json:"connector_id,omitempty"`

	// GroupPrefixes List of start_with string patterns for groups to sync
	GroupPrefixes *[]string `json:"group_prefixes,omitempty"`

	// Host Azure host domain for the Graph API
	Host CreateAzureIntegrationRequestHost `json:"host"`

	// SyncInterval Sync interval in seconds (minimum 300). Defaults to 300 if not specified.
	SyncInterval *int `json:"sync_interval,omitempty"`

	// TenantId Azure AD tenant ID
	TenantId string `json:"tenant_id"`

	// UserGroupPrefixes List of start_with string patterns for groups which users to sync
	UserGroupPrefixes *[]string `json:"user_group_prefixes,omitempty"`
}

// CreateAzureIntegrationRequestHost Azure host domain for the Graph API
type CreateAzureIntegrationRequestHost string

// CreateGoogleIntegrationRequest defines model for CreateGoogleIntegrationRequest.
type CreateGoogleIntegrationRequest struct {
	// ConnectorId DEX connector ID for embedded IDP setups
	ConnectorId *string `json:"connector_id,omitempty"`

	// CustomerId Customer ID from Google Workspace Account Settings
	CustomerId string `json:"customer_id"`

	// GroupPrefixes List of start_with string patterns for groups to sync
	GroupPrefixes *[]string `json:"group_prefixes,omitempty"`

	// ServiceAccountKey Base64-encoded Google service account key
	ServiceAccountKey string `json:"service_account_key"`

	// SyncInterval Sync interval in seconds (minimum 300). Defaults to 300 if not specified.
	SyncInterval *int `json:"sync_interval,omitempty"`

	// UserGroupPrefixes List of start_with string patterns for groups which users to sync
	UserGroupPrefixes *[]string `json:"user_group_prefixes,omitempty"`
}

// CreateIntegrationRequest Request payload for creating a new event streaming integration. Also used as the structure for the PUT request body, but not all fields are applicable for updates (see PUT operation description).
type CreateIntegrationRequest struct {
	// Config Platform-specific configuration as key-value pairs. For creation, all necessary credentials and settings must be provided. For updates, provide the fields to change or the entire new configuration.
	Config map[string]string `json:"config"`

	// Enabled Specifies whether the integration is enabled. During creation (POST), this value is sent by the client, but the provided backend manager function `CreateIntegration` does not appear to use it directly, so its effect on creation should be verified. During updates (PUT), this field is used to enable or disable the integration.
	Enabled bool `json:"enabled"`

	// Platform The event streaming platform to integrate with (e.g., "datadog", "s3", "firehose"). This field is used for creation. For updates (PUT), this field, if sent, is ignored by the backend.
	Platform CreateIntegrationRequestPlatform `json:"platform"`
}

// CreateIntegrationRequestPlatform The event streaming platform to integrate with (e.g., "datadog", "s3", "firehose"). This field is used for creation. For updates (PUT), this field, if sent, is ignored by the backend.
type CreateIntegrationRequestPlatform string

// CreateOktaScimIntegrationRequest defines model for CreateOktaScimIntegrationRequest.
type CreateOktaScimIntegrationRequest struct {
	// ConnectionName The Okta enterprise connection name on Auth0
	ConnectionName string `json:"connection_name"`

	// ConnectorId DEX connector ID for embedded IDP setups
	ConnectorId *string `json:"connector_id,omitempty"`

	// GroupPrefixes List of start_with string patterns for groups to sync
	GroupPrefixes *[]string `json:"group_prefixes,omitempty"`

	// UserGroupPrefixes List of start_with string patterns for groups which users to sync
	UserGroupPrefixes *[]string `json:"user_group_prefixes,omitempty"`
}

// CreateScimIntegrationRequest defines model for CreateScimIntegrationRequest.
type CreateScimIntegrationRequest struct {
	// ConnectorId DEX connector ID for embedded IDP setups
	ConnectorId *string `json:"connector_id,omitempty"`

	// GroupPrefixes List of start_with string patterns for groups to sync
	GroupPrefixes *[]string `json:"group_prefixes,omitempty"`

	// Prefix The connection prefix used for the SCIM provider
	Prefix string `json:"prefix"`

	// Provider Name of the SCIM identity provider
	Provider string `json:"provider"`

	// UserGroupPrefixes List of start_with string patterns for groups which users to sync
	UserGroupPrefixes *[]string `json:"user_group_prefixes,omitempty"`
}

// CreateSetupKeyRequest defines model for CreateSetupKeyRequest.
type CreateSetupKeyRequest struct {
	// AllowExtraDnsLabels Allow extra DNS labels to be added to the peer
	AllowExtraDnsLabels *bool `json:"allow_extra_dns_labels,omitempty"`

	// AutoGroups List of group IDs to auto-assign to peers registered with this key
	AutoGroups []string `json:"auto_groups"`

	// Ephemeral Indicate that the peer will be ephemeral or not
	Ephemeral *bool `json:"ephemeral,omitempty"`

	// ExpiresIn Expiration time in seconds
	ExpiresIn int `json:"expires_in"`

	// Name Setup Key name
	Name string `json:"name"`

	// Type Setup key type, one-off for single time usage and reusable
	Type string `json:"type"`

	// UsageLimit A number of times this key can be used. The value of 0 indicates the unlimited usage.
	UsageLimit int `json:"usage_limit"`
}

// CreateTenantRequest defines model for CreateTenantRequest.
type CreateTenantRequest struct {
	// Domain The name for the MSP tenant
	Domain string `json:"domain"`

	// Groups MSP users Groups that can access the Tenant and Roles to assume
	Groups []TenantGroupResponse `json:"groups"`

	// Name The name for the MSP tenant
	Name string `json:"name"`
}

// DNSChallengeResponse defines model for DNSChallengeResponse.
type DNSChallengeResponse struct {
	// DnsChallenge The DNS challenge to set in a TXT record
	DnsChallenge string `json:"dns_challenge"`
}

// DNSRecord defines model for DNSRecord.
type DNSRecord struct {
	// Content DNS record content (IP address for A/AAAA, domain for CNAME)
	Content string `json:"content"`

	// Id DNS record ID
	Id string `json:"id"`

	// Name FQDN for the DNS record. Must be a subdomain within or match the zone's domain.
	Name string `json:"name"`

	// Ttl Time to live in seconds
	Ttl int `json:"ttl"`

	// Type DNS record type
	Type DNSRecordType `json:"type"`
}

// DNSRecordRequest defines model for DNSRecordRequest.
type DNSRecordRequest struct {
	// Content DNS record content (IP address for A/AAAA, domain for CNAME)
	Content string `json:"content"`

	// Name FQDN for the DNS record. Must be a subdomain within or match the zone's domain.
	Name string `json:"name"`

	// Ttl Time to live in seconds
	Ttl int `json:"ttl"`

	// Type DNS record type
	Type DNSRecordType `json:"type"`
}

// DNSRecordType DNS record type
type DNSRecordType string

// DNSSettings defines model for DNSSettings.
type DNSSettings struct {
	// DisabledManagementGroups Groups whose DNS management is disabled
	DisabledManagementGroups []string `json:"disabled_management_groups"`
}

// EDRFalconRequest Request payload for creating or updating a EDR Falcon integration
type EDRFalconRequest struct {
	// ClientId CrowdStrike API client ID
	ClientId string `json:"client_id"`

	// CloudId CrowdStrike cloud identifier (e.g., "us-1", "us-2", "eu-1")
	CloudId string `json:"cloud_id"`

	// Enabled Indicates whether the integration is enabled
	Enabled *bool `json:"enabled,omitempty"`

	// Groups The Groups this integration applies to
	Groups []string `json:"groups"`

	// Secret CrowdStrike API client secret
	Secret string `json:"secret"`

	// ZtaScoreThreshold The minimum Zero Trust Assessment score required for agent approval (0-100)
	ZtaScoreThreshold int `json:"zta_score_threshold"`
}

// EDRFalconResponse Represents a Falcon EDR integration
type EDRFalconResponse struct {
	// AccountId The identifier of the account this integration belongs to.
	AccountId string `json:"account_id"`

	// CloudId CrowdStrike cloud identifier
	CloudId string `json:"cloud_id"`

	// CreatedAt Timestamp of when the integration was created.
	CreatedAt time.Time `json:"created_at"`

	// CreatedBy The user id that created the integration
	CreatedBy string `json:"created_by"`

	// Enabled Indicates whether the integration is enabled
	Enabled bool `json:"enabled"`

	// Groups List of groups
	Groups []Group `json:"groups"`

	// Id The unique numeric identifier for the integration.
	Id int64 `json:"id"`

	// LastSyncedAt Timestamp of when the integration was last synced.
	LastSyncedAt time.Time `json:"last_synced_at"`

	// UpdatedAt Timestamp of when the integration was last updated.
	UpdatedAt time.Time `json:"updated_at"`

	// ZtaScoreThreshold The minimum Zero Trust Assessment score required for agent approval (0-100)
	ZtaScoreThreshold int `json:"zta_score_threshold"`
}

// EDRFleetDMRequest Request payload for creating or updating a FleetDM EDR integration
type EDRFleetDMRequest struct {
	// ApiToken FleetDM API token
	ApiToken string `json:"api_token"`

	// ApiUrl FleetDM server URL
	ApiUrl string `json:"api_url"`

	// Enabled Indicates whether the integration is enabled
	Enabled *bool `json:"enabled,omitempty"`

	// Groups The Groups this integrations applies to
	Groups []string `json:"groups"`

	// LastSyncedInterval The devices last sync requirement interval in hours. Minimum value is 24 hours
	LastSyncedInterval int `json:"last_synced_interval"`

	// MatchAttributes Attribute conditions to match when approving FleetDM hosts. Most attributes work with FleetDM's free/open-source version. Premium-only attributes are marked accordingly
	MatchAttributes FleetDMMatchAttributes `json:"match_attributes"`
}

// EDRFleetDMResponse Represents a FleetDM EDR integration configuration
type EDRFleetDMResponse struct {
	// AccountId The identifier of the account this integration belongs to.
	AccountId string `json:"account_id"`

	// ApiUrl FleetDM server URL
	ApiUrl string `json:"api_url"`

	// CreatedAt Timestamp of when the integration was created.
	CreatedAt time.Time `json:"created_at"`

	// CreatedBy The user id that created the integration
	CreatedBy string `json:"created_by"`

	// Enabled Indicates whether the integration is enabled
	Enabled bool `json:"enabled"`

	// Groups List of groups
	Groups []Group `json:"groups"`

	// Id The unique numeric identifier for the integration.
	Id int64 `json:"id"`

	// LastSyncedAt Timestamp of when the integration was last synced.
	LastSyncedAt time.Time `json:"last_synced_at"`

	// LastSyncedInterval The devices last sync requirement interval in hours.
	LastSyncedInterval int `json:"last_synced_interval"`

	// MatchAttributes Attribute conditions to match when approving FleetDM hosts. Most attributes work with FleetDM's free/open-source version. Premium-only attributes are marked accordingly
	MatchAttributes FleetDMMatchAttributes `json:"match_attributes"`

	// UpdatedAt Timestamp of when the integration was last updated.
	UpdatedAt time.Time `json:"updated_at"`
}

// EDRHuntressRequest Request payload for creating or updating a EDR Huntress integration
type EDRHuntressRequest struct {
	// ApiKey Huntress API key
	ApiKey string `json:"api_key"`

	// ApiSecret Huntress API secret
	ApiSecret string `json:"api_secret"`

	// Enabled Indicates whether the integration is enabled
	Enabled *bool `json:"enabled,omitempty"`

	// Groups The Groups this integrations applies to
	Groups []string `json:"groups"`

	// LastSyncedInterval The devices last sync requirement interval in hours. Minimum value is 24 hours
	LastSyncedInterval int `json:"last_synced_interval"`

	// MatchAttributes Attribute conditions to match when approving agents
	MatchAttributes HuntressMatchAttributes `json:"match_attributes"`
}

// EDRHuntressResponse Represents a Huntress EDR integration configuration
type EDRHuntressResponse struct {
	// AccountId The identifier of the account this integration belongs to.
	AccountId string `json:"account_id"`

	// CreatedAt Timestamp of when the integration was created.
	CreatedAt time.Time `json:"created_at"`

	// CreatedBy The user id that created the integration
	CreatedBy string `json:"created_by"`

	// Enabled Indicates whether the integration is enabled
	Enabled bool `json:"enabled"`

	// Groups List of groups
	Groups []Group `json:"groups"`

	// Id The unique numeric identifier for the integration.
	Id int64 `json:"id"`

	// LastSyncedAt Timestamp of when the integration was last synced.
	LastSyncedAt time.Time `json:"last_synced_at"`

	// LastSyncedInterval The devices last sync requirement interval in hours.
	LastSyncedInterval int `json:"last_synced_interval"`

	// MatchAttributes Attribute conditions to match when approving agents
	MatchAttributes HuntressMatchAttributes `json:"match_attributes"`

	// UpdatedAt Timestamp of when the integration was last updated.
	UpdatedAt time.Time `json:"updated_at"`
}

// EDRIntuneRequest Request payload for creating or updating a EDR Intune integration.
type EDRIntuneRequest struct {
	// ClientId The Azure application client id
	ClientId string `json:"client_id"`

	// Enabled Indicates whether the integration is enabled
	Enabled *bool `json:"enabled,omitempty"`

	// Groups The Groups this integrations applies to
	Groups []string `json:"groups"`

	// LastSyncedInterval The devices last sync requirement interval in hours. Minimum value is 24 hours.
	LastSyncedInterval int `json:"last_synced_interval"`

	// Secret The Azure application client secret
	Secret string `json:"secret"`

	// TenantId The Azure tenant id
	TenantId string `json:"tenant_id"`
}

// EDRIntuneResponse Represents a Intune EDR integration configuration
type EDRIntuneResponse struct {
	// AccountId The identifier of the account this integration belongs to.
	AccountId string `json:"account_id"`

	// ClientId The Azure application client id
	ClientId string `json:"client_id"`

	// CreatedAt Timestamp of when the integration was created.
	CreatedAt time.Time `json:"created_at"`

	// CreatedBy The user id that created the integration
	CreatedBy string `json:"created_by"`

	// Enabled Indicates whether the integration is enabled
	Enabled bool `json:"enabled"`

	// Groups List of groups
	Groups []Group `json:"groups"`

	// Id The unique numeric identifier for the integration.
	Id int64 `json:"id"`

	// LastSyncedAt Timestamp of when the integration was last synced.
	LastSyncedAt time.Time `json:"last_synced_at"`

	// LastSyncedInterval The devices last sync requirement interval in hours.
	LastSyncedInterval int `json:"last_synced_interval"`

	// TenantId The Azure tenant id
	TenantId string `json:"tenant_id"`

	// UpdatedAt Timestamp of when the integration was last updated.
	UpdatedAt time.Time `json:"updated_at"`
}

// EDRSentinelOneRequest Request payload for creating or updating a EDR SentinelOne integration
type EDRSentinelOneRequest struct {
	// ApiToken SentinelOne API token
	ApiToken string `json:"api_token"`

	// ApiUrl The Base URL of SentinelOne API
	ApiUrl string `json:"api_url"`

	// Enabled Indicates whether the integration is enabled
	Enabled *bool `json:"enabled,omitempty"`

	// Groups The Groups this integrations applies to
	Groups []string `json:"groups"`

	// LastSyncedInterval The devices last sync requirement interval in hours. Minimum value is 24 hours.
	LastSyncedInterval int `json:"last_synced_interval"`

	// MatchAttributes Attribute conditions to match when approving agents
	MatchAttributes SentinelOneMatchAttributes `json:"match_attributes"`
}

// EDRSentinelOneResponse Represents a SentinelOne EDR integration configuration
type EDRSentinelOneResponse struct {
	// AccountId The identifier of the account this integration belongs to.
	AccountId string `json:"account_id"`

	// ApiUrl The Base URL of SentinelOne API
	ApiUrl string `json:"api_url"`

	// CreatedAt Timestamp of when the integration was created.
	CreatedAt time.Time `json:"created_at"`

	// CreatedBy The user id that created the integration
	CreatedBy string `json:"created_by"`

	// Enabled Indicates whether the integration is enabled
	Enabled bool `json:"enabled"`

	// Groups List of groups
	Groups []Group `json:"groups"`

	// Id The unique numeric identifier for the integration.
	Id int64 `json:"id"`

	// LastSyncedAt Timestamp of when the integration was last synced.
	LastSyncedAt time.Time `json:"last_synced_at"`

	// LastSyncedInterval The devices last sync requirement interval in hours.
	LastSyncedInterval int `json:"last_synced_interval"`

	// MatchAttributes Attribute conditions to match when approving agents
	MatchAttributes SentinelOneMatchAttributes `json:"match_attributes"`

	// UpdatedAt Timestamp of when the integration was last updated.
	UpdatedAt time.Time `json:"updated_at"`
}

// EmailTarget Target configuration for email notification channels.
type EmailTarget struct {
	// Emails List of email addresses to send notifications to.
	Emails []openapi_types.Email `json:"emails"`
}

// ErrorResponse Standard error response. Note: The exact structure of this error response is inferred from `util.WriteErrorResponse` and `util.WriteError` usage in the provided Go code, as a specific Go struct for errors was not provided.
type ErrorResponse struct {
	// Message A human-readable error message.
	Message *string `json:"message,omitempty"`
}

// Event defines model for Event.
type Event struct {
	// Activity The activity that occurred during the event
	Activity string `json:"activity"`

	// ActivityCode The string code of the activity that occurred during the event
	ActivityCode EventActivityCode `json:"activity_code"`

	// Id Event unique identifier
	Id string `json:"id"`

	// InitiatorEmail The e-mail address of the initiator of the event. E.g., an e-mail of a user that triggered the event.
	InitiatorEmail string `json:"initiator_email"`

	// InitiatorId The ID of the initiator of the event. E.g., an ID of a user that triggered the event.
	InitiatorId string `json:"initiator_id"`

	// InitiatorName The name of the initiator of the event.
	InitiatorName string `json:"initiator_name"`

	// Meta The metadata of the event
	Meta map[string]string `json:"meta"`

	// TargetId The ID of the target of the event. E.g., an ID of the peer that a user removed.
	TargetId string `json:"target_id"`

	// Timestamp The date and time when the event occurred
	Timestamp time.Time `json:"timestamp"`
}

// EventActivityCode The string code of the activity that occurred during the event
type EventActivityCode string

// FleetDMMatchAttributes Attribute conditions to match when approving FleetDM hosts. Most attributes work with FleetDM's free/open-source version. Premium-only attributes are marked accordingly
type FleetDMMatchAttributes struct {
	// DiskEncryptionEnabled Whether disk encryption (FileVault/BitLocker) must be enabled on the host
	DiskEncryptionEnabled *bool `json:"disk_encryption_enabled,omitempty"`

	// FailingPoliciesCountMax Maximum number of allowed failing policies. Use 0 to require all policies to pass
	FailingPoliciesCountMax *int `json:"failing_policies_count_max,omitempty"`

	// RequiredPolicies List of FleetDM policy IDs that must be passing on the host. If any of these policies is failing, the host is non-compliant
	RequiredPolicies *[]int `json:"required_policies,omitempty"`

	// StatusOnline Whether the host must be online (recently seen by Fleet)
	StatusOnline *bool `json:"status_online,omitempty"`

	// VulnerableSoftwareCountMax Maximum number of allowed vulnerable software on the host
	VulnerableSoftwareCountMax *int `json:"vulnerable_software_count_max,omitempty"`
}

// GeoLocationCheck Posture check for geo location
type GeoLocationCheck struct {
	// Action Action to take upon policy match
	Action GeoLocationCheckAction `json:"action"`

	// Locations List of geo locations to which the policy applies
	Locations []Location `json:"locations"`
}

// GeoLocationCheckAction Action to take upon policy match
type GeoLocationCheckAction string

// GetTenantsResponse defines model for GetTenantsResponse.
type GetTenantsResponse = []TenantResponse

// GoogleIntegration defines model for GoogleIntegration.
type GoogleIntegration struct {
	// ConnectorId DEX connector ID for embedded IDP setups
	ConnectorId *string `json:"connector_id,omitempty"`

	// CustomerId Customer ID from Google Workspace
	CustomerId string `json:"customer_id"`

	// Enabled Whether the integration is enabled
	Enabled bool `json:"enabled"`

	// GroupPrefixes List of start_with string patterns for groups to sync
	GroupPrefixes []string `json:"group_prefixes"`

	// Id The unique identifier for the integration
	Id int64 `json:"id"`

	// LastSyncedAt Timestamp of the last synchronization
	LastSyncedAt time.Time `json:"last_synced_at"`

	// SyncInterval Sync interval in seconds
	SyncInterval int `json:"sync_interval"`

	// UserGroupPrefixes List of start_with string patterns for groups which users to sync
	UserGroupPrefixes []string `json:"user_group_prefixes"`
}

// Group defines model for Group.
type Group struct {
	// Id Group ID
	Id string `json:"id"`

	// Issued How the group was issued (api, integration, jwt)
	Issued *GroupIssued `json:"issued,omitempty"`

	// Name Group Name identifier
	Name string `json:"name"`

	// Peers List of peers object
	Peers []PeerMinimum `json:"peers"`

	// PeersCount Count of peers associated to the group
	PeersCount int        `json:"peers_count"`
	Resources  []Resource `json:"resources"`

	// ResourcesCount Count of resources associated to the group
	ResourcesCount int `json:"resources_count"`
}

// GroupIssued How the group was issued (api, integration, jwt)
type GroupIssued string

// GroupMinimum defines model for GroupMinimum.
type GroupMinimum struct {
	// Id Group ID
	Id string `json:"id"`

	// Issued How the group was issued (api, integration, jwt)
	Issued *GroupMinimumIssued `json:"issued,omitempty"`

	// Name Group Name identifier
	Name string `json:"name"`

	// PeersCount Count of peers associated to the group
	PeersCount int `json:"peers_count"`

	// ResourcesCount Count of resources associated to the group
	ResourcesCount int `json:"resources_count"`
}

// GroupMinimumIssued How the group was issued (api, integration, jwt)
type GroupMinimumIssued string

// GroupRequest defines model for GroupRequest.
type GroupRequest struct {
	// Name Group name identifier
	Name string `json:"name"`

	// Peers List of peers ids
	Peers     *[]string   `json:"peers,omitempty"`
	Resources *[]Resource `json:"resources,omitempty"`
}

// HeaderAuthConfig Static header-value authentication. The proxy checks that the named header matches the configured value.
type HeaderAuthConfig struct {
	// Enabled Whether header auth is enabled
	Enabled bool `json:"enabled"`

	// Header HTTP header name to check (e.g. "Authorization", "X-API-Key")
	Header string `json:"header"`

	// Value Expected header value. For Basic auth use "Basic base64(user:pass)". For Bearer use "Bearer token". Cleared in responses.
	Value string `json:"value"`
}

// HuntressMatchAttributes Attribute conditions to match when approving agents
type HuntressMatchAttributes struct {
	// DefenderPolicyStatus Policy status of Defender AV for Managed Antivirus.
	DefenderPolicyStatus *string `json:"defender_policy_status,omitempty"`

	// DefenderStatus Status of Defender AV Managed Antivirus.
	DefenderStatus *string `json:"defender_status,omitempty"`

	// DefenderSubstatus Sub-status of Defender AV Managed Antivirus.
	DefenderSubstatus *string `json:"defender_substatus,omitempty"`

	// FirewallStatus Status of agent firewall. Can be one of Disabled, Enabled, Pending Isolation, Isolated, Pending Release.
	FirewallStatus *string `json:"firewall_status,omitempty"`
}

// IdentityProvider defines model for IdentityProvider.
type IdentityProvider struct {
	// ClientId OAuth2 client ID
	ClientId string `json:"client_id"`

	// Id Identity provider ID
	Id *string `json:"id,omitempty"`

	// Issuer OIDC issuer URL
	Issuer string `json:"issuer"`

	// Name Human-readable name for the identity provider
	Name string `json:"name"`

	// Type Type of identity provider
	Type IdentityProviderType `json:"type"`
}

// IdentityProviderRequest defines model for IdentityProviderRequest.
type IdentityProviderRequest struct {
	// ClientId OAuth2 client ID
	ClientId string `json:"client_id"`

	// ClientSecret OAuth2 client secret
	ClientSecret string `json:"client_secret"`

	// Issuer OIDC issuer URL
	Issuer string `json:"issuer"`

	// Name Human-readable name for the identity provider
	Name string `json:"name"`

	// Type Type of identity provider
	Type IdentityProviderType `json:"type"`
}

// IdentityProviderType Type of identity provider
type IdentityProviderType string

// IdpIntegrationSyncLog Represents a synchronization log entry for an integration
type IdpIntegrationSyncLog struct {
	// Id The unique identifier for the sync log
	Id int64 `json:"id"`

	// Level The log level
	Level string `json:"level"`

	// Message Log message
	Message string `json:"message"`

	// Timestamp Timestamp of when the log was created
	Timestamp time.Time `json:"timestamp"`
}

// IngressPeer defines model for IngressPeer.
type IngressPeer struct {
	AvailablePorts AvailablePorts `json:"available_ports"`

	// Connected Indicates if an ingress peer is connected to the management server
	Connected bool `json:"connected"`

	// Enabled Indicates if an ingress peer is enabled
	Enabled bool `json:"enabled"`

	// Fallback Indicates if an ingress peer can be used as a fallback if no ingress peer can be found in the region of the forwarded peer
	Fallback bool `json:"fallback"`

	// Id ID of the ingress peer
	Id string `json:"id"`

	// IngressIp Ingress IP address of the ingress peer where the traffic arrives
	IngressIp string `json:"ingress_ip"`

	// PeerId ID of the peer that is used as an ingress peer
	PeerId string `json:"peer_id"`

	// Region Region of the ingress peer
	Region string `json:"region"`
}

// IngressPeerCreateRequest defines model for IngressPeerCreateRequest.
type IngressPeerCreateRequest struct {
	// Enabled Defines if an ingress peer is enabled
	Enabled bool `json:"enabled"`

	// Fallback Defines if an ingress peer can be used as a fallback if no ingress peer can be found in the region of the forwarded peer
	Fallback bool `json:"fallback"`

	// PeerId ID of the peer that is used as an ingress peer
	PeerId string `json:"peer_id"`
}

// IngressPeerUpdateRequest defines model for IngressPeerUpdateRequest.
type IngressPeerUpdateRequest struct {
	// Enabled Defines if an ingress peer is enabled
	Enabled bool `json:"enabled"`

	// Fallback Defines if an ingress peer can be used as a fallback if no ingress peer can be found in the region of the forwarded peer
	Fallback bool `json:"fallback"`
}

// IngressPortAllocation defines model for IngressPortAllocation.
type IngressPortAllocation struct {
	// Enabled Indicates if an ingress port allocation is enabled
	Enabled bool `json:"enabled"`

	// Id ID of the ingress port allocation
	Id string `json:"id"`

	// IngressIp Ingress IP address of the ingress peer where the traffic arrives
	IngressIp string `json:"ingress_ip"`

	// IngressPeerId ID of the ingress peer that forwards the ports
	IngressPeerId string `json:"ingress_peer_id"`

	// Name Name of the ingress port allocation
	Name string `json:"name"`

	// PortRangeMappings List of port ranges that are allowed to be used by the ingress peer
	PortRangeMappings []IngressPortAllocationPortMapping `json:"port_range_mappings"`

	// Region Region of the ingress peer
	Region string `json:"region"`
}

// IngressPortAllocationPortMapping defines model for IngressPortAllocationPortMapping.
type IngressPortAllocationPortMapping struct {
	// IngressEnd The ending port of the range of ingress ports mapped to the forwarded ports
	IngressEnd int `json:"ingress_end"`

	// IngressStart The starting port of the range of ingress ports mapped to the forwarded ports
	IngressStart int `json:"ingress_start"`

	// Protocol Protocol accepted by the ports
	Protocol IngressPortAllocationPortMappingProtocol `json:"protocol"`

	// TranslatedEnd The ending port of the translated range of forwarded ports
	TranslatedEnd int `json:"translated_end"`

	// TranslatedStart The starting port of the translated range of forwarded ports
	TranslatedStart int `json:"translated_start"`
}

// IngressPortAllocationPortMappingProtocol Protocol accepted by the ports
type IngressPortAllocationPortMappingProtocol string

// IngressPortAllocationRequest defines model for IngressPortAllocationRequest.
type IngressPortAllocationRequest struct {
	DirectPort *IngressPortAllocationRequestDirectPort `json:"direct_port,omitempty"`

	// Enabled Indicates if an ingress port allocation is enabled
	Enabled bool `json:"enabled"`

	// Name Name of the ingress port allocation
	Name string `json:"name"`

	// PortRanges List of port ranges that are forwarded by the ingress peer
	PortRanges *[]IngressPortAllocationRequestPortRange `json:"port_ranges,omitempty"`
}

// IngressPortAllocationRequestDirectPort defines model for IngressPortAllocationRequestDirectPort.
type IngressPortAllocationRequestDirectPort struct {
	// Count The number of ports to be forwarded
	Count int `json:"count"`

	// Protocol The protocol accepted by the port
	Protocol IngressPortAllocationRequestDirectPortProtocol `json:"protocol"`
}

// IngressPortAllocationRequestDirectPortProtocol The protocol accepted by the port
type IngressPortAllocationRequestDirectPortProtocol string

// IngressPortAllocationRequestPortRange defines model for IngressPortAllocationRequestPortRange.
type IngressPortAllocationRequestPortRange struct {
	// End The ending port of the range of forwarded ports
	End int `json:"end"`

	// Protocol The protocol accepted by the port range
	Protocol IngressPortAllocationRequestPortRangeProtocol `json:"protocol"`

	// Start The starting port of the range of forwarded ports
	Start int `json:"start"`
}

// IngressPortAllocationRequestPortRangeProtocol The protocol accepted by the port range
type IngressPortAllocationRequestPortRangeProtocol string

// InstanceStatus Instance status information
type InstanceStatus struct {
	// SetupRequired Indicates whether the instance requires initial setup
	SetupRequired bool `json:"setup_required"`
}

// InstanceVersionInfo Version information for NetBird components
type InstanceVersionInfo struct {
	// DashboardAvailableVersion The latest available version of the dashboard (from GitHub releases)
	DashboardAvailableVersion *string `json:"dashboard_available_version,omitempty"`

	// ManagementAvailableVersion The latest available version of the management server (from GitHub releases)
	ManagementAvailableVersion *string `json:"management_available_version,omitempty"`

	// ManagementCurrentVersion The current running version of the management server
	ManagementCurrentVersion string `json:"management_current_version"`

	// ManagementUpdateAvailable Indicates if a newer management version is available
	ManagementUpdateAvailable bool `json:"management_update_available"`
}

// IntegrationEnabled defines model for IntegrationEnabled.
type IntegrationEnabled struct {
	// Enabled Whether the integration is enabled
	Enabled *bool `json:"enabled,omitempty"`
}

// IntegrationResponse Represents an event streaming integration.
type IntegrationResponse struct {
	// AccountId The identifier of the account this integration belongs to.
	AccountId *string `json:"account_id,omitempty"`

	// Config Configuration for the integration. Sensitive keys (like API keys, secret keys) are masked with '****' in responses, as indicated by the GetIntegration handler logic.
	Config *map[string]string `json:"config,omitempty"`

	// CreatedAt Timestamp of when the integration was created.
	CreatedAt *time.Time `json:"created_at,omitempty"`

	// Enabled Whether the integration is currently active.
	Enabled *bool `json:"enabled,omitempty"`

	// Id The unique numeric identifier for the integration.
	Id *int64 `json:"id,omitempty"`

	// Platform The event streaming platform.
	Platform *IntegrationResponsePlatform `json:"platform,omitempty"`

	// UpdatedAt Timestamp of when the integration was last updated.
	UpdatedAt *time.Time `json:"updated_at,omitempty"`
}

// IntegrationResponsePlatform The event streaming platform.
type IntegrationResponsePlatform string

// IntegrationSyncFilters defines model for IntegrationSyncFilters.
type IntegrationSyncFilters struct {
	// ConnectorId DEX connector ID for embedded IDP setups
	ConnectorId *string `json:"connector_id,omitempty"`

	// GroupPrefixes List of start_with string patterns for groups to sync
	GroupPrefixes *[]string `json:"group_prefixes,omitempty"`

	// UserGroupPrefixes List of start_with string patterns for groups which users to sync
	UserGroupPrefixes *[]string `json:"user_group_prefixes,omitempty"`
}

// InvoicePDFResponse defines model for InvoicePDFResponse.
type InvoicePDFResponse struct {
	// Url URL to redirect the user to invoice.
	Url string `json:"url"`
}

// InvoiceResponse defines model for InvoiceResponse.
type InvoiceResponse struct {
	// Id The Stripe invoice id
	Id string `json:"id"`

	// PeriodEnd The end date of the invoice period.
	PeriodEnd time.Time `json:"period_end"`

	// PeriodStart The start date of the invoice period.
	PeriodStart time.Time `json:"period_start"`

	// Type The invoice type
	Type InvoiceResponseType `json:"type"`
}

// InvoiceResponseType The invoice type
type InvoiceResponseType string

// JobRequest defines model for JobRequest.
type JobRequest struct {
	Workload WorkloadRequest `json:"workload"`
}

// JobResponse defines model for JobResponse.
type JobResponse struct {
	CompletedAt  *time.Time        `json:"completed_at,omitempty"`
	CreatedAt    time.Time         `json:"created_at"`
	FailedReason *string           `json:"failed_reason,omitempty"`
	Id           string            `json:"id"`
	Status       JobResponseStatus `json:"status"`
	TriggeredBy  string            `json:"triggered_by"`
	Workload     WorkloadResponse  `json:"workload"`
}

// JobResponseStatus defines model for JobResponse.Status.
type JobResponseStatus string

// LinkAuthConfig defines model for LinkAuthConfig.
type LinkAuthConfig struct {
	// Enabled Whether link auth is enabled
	Enabled bool `json:"enabled"`
}

// Location Describe geographical location information
type Location struct {
	// CityName Commonly used English name of the city
	CityName *CityName `json:"city_name,omitempty"`

	// CountryCode 2-letter ISO 3166-1 alpha-2 code that represents the country
	CountryCode CountryCode `json:"country_code"`
}

// MinKernelVersionCheck Posture check with the kernel version
type MinKernelVersionCheck struct {
	// MinKernelVersion Minimum acceptable version
	MinKernelVersion string `json:"min_kernel_version"`
}

// MinVersionCheck Posture check for the version of operating system
type MinVersionCheck struct {
	// MinVersion Minimum acceptable version
	MinVersion string `json:"min_version"`
}

// NBVersionCheck Posture check for the version of operating system
type NBVersionCheck = MinVersionCheck

// Nameserver defines model for Nameserver.
type Nameserver struct {
	// Ip Nameserver IP
	Ip string `json:"ip"`

	// NsType Nameserver Type
	NsType NameserverNsType `json:"ns_type"`

	// Port Nameserver Port
	Port int `json:"port"`
}

// NameserverNsType Nameserver Type
type NameserverNsType string

// NameserverGroup defines model for NameserverGroup.
type NameserverGroup struct {
	// Description Description of the nameserver group
	Description string `json:"description"`

	// Domains Match domain list. It should be empty only if primary is true.
	Domains []string `json:"domains"`

	// Enabled Nameserver group status
	Enabled bool `json:"enabled"`

	// Groups Distribution group IDs that defines group of peers that will use this nameserver group
	Groups []string `json:"groups"`

	// Id Nameserver group ID
	Id string `json:"id"`

	// Name Name of nameserver group name
	Name string `json:"name"`

	// Nameservers Nameserver list
	Nameservers []Nameserver `json:"nameservers"`

	// Primary Defines if a nameserver group is primary that resolves all domains. It should be true only if domains list is empty.
	Primary bool `json:"primary"`

	// SearchDomainsEnabled Search domain status for match domains. It should be true only if domains list is not empty.
	SearchDomainsEnabled bool `json:"search_domains_enabled"`
}

// NameserverGroupRequest defines model for NameserverGroupRequest.
type NameserverGroupRequest struct {
	// Description Description of the nameserver group
	Description string `json:"description"`

	// Domains Match domain list. It should be empty only if primary is true.
	Domains []string `json:"domains"`

	// Enabled Nameserver group status
	Enabled bool `json:"enabled"`

	// Groups Distribution group IDs that defines group of peers that will use this nameserver group
	Groups []string `json:"groups"`

	// Name Name of nameserver group name
	Name string `json:"name"`

	// Nameservers Nameserver list
	Nameservers []Nameserver `json:"nameservers"`

	// Primary Defines if a nameserver group is primary that resolves all domains. It should be true only if domains list is empty.
	Primary bool `json:"primary"`

	// SearchDomainsEnabled Search domain status for match domains. It should be true only if domains list is not empty.
	SearchDomainsEnabled bool `json:"search_domains_enabled"`
}

// Network defines model for Network.
type Network struct {
	// Description Network description
	Description *string `json:"description,omitempty"`

	// Id Network ID
	Id string `json:"id"`

	// Name Network name
	Name string `json:"name"`

	// Policies List of policy IDs associated with the network
	Policies []string `json:"policies"`

	// Resources List of network resource IDs associated with the network
	Resources []string `json:"resources"`

	// Routers List of router IDs associated with the network
	Routers []string `json:"routers"`

	// RoutingPeersCount Count of routing peers associated with the network
	RoutingPeersCount int `json:"routing_peers_count"`
}

// NetworkRequest defines model for NetworkRequest.
type NetworkRequest struct {
	// Description Network description
	Description *string `json:"description,omitempty"`

	// Name Network name
	Name string `json:"name"`
}

// NetworkResource defines model for NetworkResource.
type NetworkResource struct {
	// Address Network resource address (either a direct host like 1.1.1.1 or 1.1.1.1/32, or a subnet like 192.168.178.0/24, or domains like example.com and *.example.com)
	Address string `json:"address"`

	// Description Network resource description
	Description *string `json:"description,omitempty"`

	// Enabled Network resource status
	Enabled bool `json:"enabled"`

	// Groups Groups that the resource belongs to
	Groups []GroupMinimum `json:"groups"`

	// Id Network Resource ID
	Id string `json:"id"`

	// Name Network resource name
	Name string `json:"name"`

	// Type Network resource type based of the address
	Type NetworkResourceType `json:"type"`
}

// NetworkResourceMinimum defines model for NetworkResourceMinimum.
type NetworkResourceMinimum struct {
	// Address Network resource address (either a direct host like 1.1.1.1 or 1.1.1.1/32, or a subnet like 192.168.178.0/24, or domains like example.com and *.example.com)
	Address string `json:"address"`

	// Description Network resource description
	Description *string `json:"description,omitempty"`

	// Enabled Network resource status
	Enabled bool `json:"enabled"`

	// Name Network resource name
	Name string `json:"name"`
}

// NetworkResourceRequest defines model for NetworkResourceRequest.
type NetworkResourceRequest struct {
	// Address Network resource address (either a direct host like 1.1.1.1 or 1.1.1.1/32, or a subnet like 192.168.178.0/24, or domains like example.com and *.example.com)
	Address string `json:"address"`

	// Description Network resource description
	Description *string `json:"description,omitempty"`

	// Enabled Network resource status
	Enabled bool `json:"enabled"`

	// Groups Group IDs containing the resource
	Groups []string `json:"groups"`

	// Name Network resource name
	Name string `json:"name"`
}

// NetworkResourceType Network resource type based of the address
type NetworkResourceType string

// NetworkRouter defines model for NetworkRouter.
type NetworkRouter struct {
	// Enabled Network router status
	Enabled bool `json:"enabled"`

	// Id Network Router Id
	Id string `json:"id"`

	// Masquerade Indicate if peer should masquerade traffic to this route's prefix
	Masquerade bool `json:"masquerade"`

	// Metric Route metric number. Lowest number has higher priority
	Metric int `json:"metric"`

	// Peer Peer Identifier associated with route. This property can not be set together with `peer_groups`
	Peer *string `json:"peer,omitempty"`

	// PeerGroups Peers Group Identifier associated with route. This property can not be set together with `peer`
	PeerGroups *[]string `json:"peer_groups,omitempty"`
}

// NetworkRouterRequest defines model for NetworkRouterRequest.
type NetworkRouterRequest struct {
	// Enabled Network router status
	Enabled bool `json:"enabled"`

	// Masquerade Indicate if peer should masquerade traffic to this route's prefix
	Masquerade bool `json:"masquerade"`

	// Metric Route metric number. Lowest number has higher priority
	Metric int `json:"metric"`

	// Peer Peer Identifier associated with route. This property can not be set together with `peer_groups`
	Peer *string `json:"peer,omitempty"`

	// PeerGroups Peers Group Identifier associated with route. This property can not be set together with `peer`
	PeerGroups *[]string `json:"peer_groups,omitempty"`
}

// NetworkTrafficEndpoint defines model for NetworkTrafficEndpoint.
type NetworkTrafficEndpoint struct {
	// Address IP address (and possibly port) in string form.
	Address string `json:"address"`

	// DnsLabel DNS label/name if available.
	DnsLabel    *string                `json:"dns_label"`
	GeoLocation NetworkTrafficLocation `json:"geo_location"`

	// Id ID of this endpoint (e.g., peer ID or resource ID).
	Id string `json:"id"`

	// Name Name is the name of the endpoint object (e.g., a peer name).
	Name string `json:"name"`

	// Os Operating system of the peer, if applicable.
	Os *string `json:"os"`

	// Type Type of the endpoint object (e.g., UNKNOWN, PEER, HOST_RESOURCE).
	Type string `json:"type"`
}

// NetworkTrafficEvent defines model for NetworkTrafficEvent.
type NetworkTrafficEvent struct {
	Destination NetworkTrafficEndpoint `json:"destination"`

	// Direction Direction of the traffic (e.g. DIRECTION_UNKNOWN, INGRESS, EGRESS).
	Direction string `json:"direction"`

	// Events List of events that are correlated to this flow (e.g., start, end).
	Events []NetworkTrafficSubEvent `json:"events"`

	// FlowId FlowID is the ID of the connection flow. Not unique because it can be the same for multiple events (e.g., start and end of the connection).
	FlowId string             `json:"flow_id"`
	Icmp   NetworkTrafficICMP `json:"icmp"`

	// NumOfDrops Number of drop events.
	NumOfDrops int `json:"num_of_drops"`

	// NumOfEnds Number of end events.
	NumOfEnds int `json:"num_of_ends"`

	// NumOfStarts Number of start events.
	NumOfStarts int                  `json:"num_of_starts"`
	Policy      NetworkTrafficPolicy `json:"policy"`

	// Protocol Protocol is the protocol of the traffic (e.g. 1 = ICMP, 6 = TCP, 17 = UDP, etc.).
	Protocol int `json:"protocol"`

	// ReporterId ID of the reporter of the event (e.g., the peer that reported the event).
	ReporterId string `json:"reporter_id"`

	// RxBytes Number of bytes received.
	RxBytes int `json:"rx_bytes"`

	// RxPackets Number of packets received.
	RxPackets int                    `json:"rx_packets"`
	Source    NetworkTrafficEndpoint `json:"source"`

	// TxBytes Number of bytes transmitted.
	TxBytes int `json:"tx_bytes"`

	// TxPackets Number of packets transmitted.
	TxPackets int                `json:"tx_packets"`
	User      NetworkTrafficUser `json:"user"`

	// WindowEnd Timestamp of the end of the aggregation window.
	WindowEnd time.Time `json:"window_end"`

	// WindowStart Timestamp of the start of the aggregation window.
	WindowStart time.Time `json:"window_start"`
}

// NetworkTrafficEventsResponse defines model for NetworkTrafficEventsResponse.
type NetworkTrafficEventsResponse struct {
	// Data List of network traffic events
	Data []NetworkTrafficEvent `json:"data"`

	// Page Current page number
	Page int `json:"page"`

	// PageSize Number of items per page
	PageSize int `json:"page_size"`

	// TotalPages Total number of pages available
	TotalPages int `json:"total_pages"`

	// TotalRecords Total number of event records available
	TotalRecords int `json:"total_records"`
}

// NetworkTrafficICMP defines model for NetworkTrafficICMP.
type NetworkTrafficICMP struct {
	// Code ICMP code (if applicable).
	Code int `json:"code"`

	// Type ICMP type (if applicable).
	Type int `json:"type"`
}

// NetworkTrafficLocation defines model for NetworkTrafficLocation.
type NetworkTrafficLocation struct {
	// CityName Name of the city (if known).
	CityName string `json:"city_name"`

	// CountryCode ISO country code (if known).
	CountryCode string `json:"country_code"`
}

// NetworkTrafficPolicy defines model for NetworkTrafficPolicy.
type NetworkTrafficPolicy struct {
	// Id ID of the policy that allowed this event.
	Id string `json:"id"`

	// Name Name of the policy that allowed this event.
	Name string `json:"name"`
}

// NetworkTrafficSubEvent defines model for NetworkTrafficSubEvent.
type NetworkTrafficSubEvent struct {
	// Timestamp Timestamp of the event as sent by the peer.
	Timestamp time.Time `json:"timestamp"`

	// Type Type of the event (e.g., TYPE_UNKNOWN, TYPE_START, TYPE_END, TYPE_DROP).
	Type string `json:"type"`
}

// NetworkTrafficUser defines model for NetworkTrafficUser.
type NetworkTrafficUser struct {
	// Email Email of the user who initiated the event (if any).
	Email string `json:"email"`

	// Id UserID is the ID of the user that initiated the event (can be empty as not every event is user-initiated).
	Id string `json:"id"`

	// Name Name of the user who initiated the event (if any).
	Name string `json:"name"`
}

// NotificationChannelRequest Request body for creating or updating a notification channel.
type NotificationChannelRequest struct {
	// Enabled Whether this notification channel is active.
	Enabled bool `json:"enabled"`

	// EventTypes List of activity event type codes this channel subscribes to.
	EventTypes []NotificationEventType `json:"event_types"`

	// Target Channel-specific target configuration. The shape depends on the `type` field:
	// - `email`: requires an `EmailTarget` object
	// - `webhook`: requires a `WebhookTarget` object
	Target *NotificationChannelRequest_Target `json:"target,omitempty"`

	// Type The type of notification channel.
	Type NotificationChannelType `json:"type"`
}

// NotificationChannelRequest_Target Channel-specific target configuration. The shape depends on the `type` field:
// - `email`: requires an `EmailTarget` object
// - `webhook`: requires a `WebhookTarget` object
type NotificationChannelRequest_Target struct {
	union json.RawMessage
}

// NotificationChannelResponse A notification channel configuration.
type NotificationChannelResponse struct {
	// Enabled Whether this notification channel is active.
	Enabled bool `json:"enabled"`

	// EventTypes List of activity event type codes this channel subscribes to.
	EventTypes []NotificationEventType `json:"event_types"`

	// Id Unique identifier of the notification channel.
	Id *string `json:"id,omitempty"`

	// Target Channel-specific target configuration. The shape depends on the `type` field:
	// - `email`: an `EmailTarget` object
	// - `webhook`: a `WebhookTarget` object
	Target *NotificationChannelResponse_Target `json:"target,omitempty"`

	// Type The type of notification channel.
	Type NotificationChannelType `json:"type"`
}

// NotificationChannelResponse_Target Channel-specific target configuration. The shape depends on the `type` field:
// - `email`: an `EmailTarget` object
// - `webhook`: a `WebhookTarget` object
type NotificationChannelResponse_Target struct {
	union json.RawMessage
}

// NotificationChannelType The type of notification channel.
type NotificationChannelType string

// NotificationEventType An activity event type code. See `GET /api/integrations/notifications/types` for the full list
// of supported event types and their human-readable descriptions.
type NotificationEventType = string

// NotificationTypeEntry A map of event type codes to their human-readable descriptions.
type NotificationTypeEntry map[string]string

// OSVersionCheck Posture check for the version of operating system
type OSVersionCheck struct {
	// Android Posture check for the version of operating system
	Android *MinVersionCheck `json:"android,omitempty"`

	// Darwin Posture check for the version of operating system
	Darwin *MinVersionCheck `json:"darwin,omitempty"`

	// Ios Posture check for the version of operating system
	Ios *MinVersionCheck `json:"ios,omitempty"`

	// Linux Posture check with the kernel version
	Linux *MinKernelVersionCheck `json:"linux,omitempty"`

	// Windows Posture check with the kernel version
	Windows *MinKernelVersionCheck `json:"windows,omitempty"`
}

// OktaScimIntegration defines model for OktaScimIntegration.
type OktaScimIntegration struct {
	// AuthToken SCIM API token (full on creation/regeneration, masked on retrieval)
	AuthToken string `json:"auth_token"`

	// ConnectorId DEX connector ID for embedded IDP setups
	ConnectorId *string `json:"connector_id,omitempty"`

	// Enabled Whether the integration is enabled
	Enabled bool `json:"enabled"`

	// GroupPrefixes List of start_with string patterns for groups to sync
	GroupPrefixes []string `json:"group_prefixes"`

	// Id The unique identifier for the integration
	Id int64 `json:"id"`

	// LastSyncedAt Timestamp of the last synchronization
	LastSyncedAt time.Time `json:"last_synced_at"`

	// UserGroupPrefixes List of start_with string patterns for groups which users to sync
	UserGroupPrefixes []string `json:"user_group_prefixes"`
}

// PINAuthConfig defines model for PINAuthConfig.
type PINAuthConfig struct {
	// Enabled Whether PIN auth is enabled
	Enabled bool `json:"enabled"`

	// Pin PIN value
	Pin string `json:"pin"`
}

// PasswordAuthConfig defines model for PasswordAuthConfig.
type PasswordAuthConfig struct {
	// Enabled Whether password auth is enabled
	Enabled bool `json:"enabled"`

	// Password Auth password
	Password string `json:"password"`
}

// PasswordChangeRequest defines model for PasswordChangeRequest.
type PasswordChangeRequest struct {
	// NewPassword The new password to set
	NewPassword string `json:"new_password"`

	// OldPassword The current password
	OldPassword string `json:"old_password"`
}

// Peer defines model for Peer.
type Peer struct {
	// ApprovalRequired (Cloud only) Indicates whether peer needs approval
	ApprovalRequired bool `json:"approval_required"`

	// CityName Commonly used English name of the city
	CityName CityName `json:"city_name"`

	// Connected Peer to Management connection status
	Connected bool `json:"connected"`

	// ConnectionIp Peer's public connection IP address
	ConnectionIp string `json:"connection_ip"`

	// CountryCode 2-letter ISO 3166-1 alpha-2 code that represents the country
	CountryCode CountryCode `json:"country_code"`

	// CreatedAt Peer creation date (UTC)
	CreatedAt time.Time `json:"created_at"`

	// DisapprovalReason (Cloud only) Reason why the peer requires approval
	DisapprovalReason *string `json:"disapproval_reason,omitempty"`

	// DnsLabel Peer's DNS label is the parsed peer name for domain resolution. It is used to form an FQDN by appending the account's domain to the peer label. e.g. peer-dns-label.netbird.cloud
	DnsLabel string `json:"dns_label"`

	// Ephemeral Indicates whether the peer is ephemeral or not
	Ephemeral bool `json:"ephemeral"`

	// ExtraDnsLabels Extra DNS labels added to the peer
	ExtraDnsLabels []string `json:"extra_dns_labels"`

	// GeonameId Unique identifier from the GeoNames database for a specific geographical location.
	GeonameId int `json:"geoname_id"`

	// Groups Groups that the peer belongs to
	Groups []GroupMinimum `json:"groups"`

	// Hostname Hostname of the machine
	Hostname string `json:"hostname"`

	// Id Peer ID
	Id string `json:"id"`

	// InactivityExpirationEnabled Indicates whether peer inactivity expiration has been enabled or not
	InactivityExpirationEnabled bool `json:"inactivity_expiration_enabled"`

	// Ip Peer's IP address
	Ip string `json:"ip"`

	// Ipv6 Peer's IPv6 overlay address
	Ipv6 *string `json:"ipv6,omitempty"`

	// KernelVersion Peer's operating system kernel version
	KernelVersion string `json:"kernel_version"`

	// LastLogin Last time this peer performed log in (authentication). E.g., user authenticated.
	LastLogin time.Time `json:"last_login"`

	// LastSeen Last time peer connected to Netbird's management service
	LastSeen   time.Time       `json:"last_seen"`
	LocalFlags *PeerLocalFlags `json:"local_flags,omitempty"`

	// LoginExpirationEnabled Indicates whether peer login expiration has been enabled or not
	LoginExpirationEnabled bool `json:"login_expiration_enabled"`

	// LoginExpired Indicates whether peer's login expired or not
	LoginExpired bool `json:"login_expired"`

	// Name Peer's hostname
	Name string `json:"name"`

	// Os Peer's operating system and version
	Os string `json:"os"`

	// SerialNumber System serial number
	SerialNumber string `json:"serial_number"`

	// SshEnabled Indicates whether SSH server is enabled on this peer
	SshEnabled bool `json:"ssh_enabled"`

	// UiVersion Peer's desktop UI version
	UiVersion string `json:"ui_version"`

	// UserId User ID of the user that enrolled this peer
	UserId string `json:"user_id"`

	// Version Peer's daemon or cli version
	Version string `json:"version"`
}

// PeerBatch defines model for PeerBatch.
type PeerBatch struct {
	// AccessiblePeersCount Number of accessible peers
	AccessiblePeersCount int `json:"accessible_peers_count"`

	// ApprovalRequired (Cloud only) Indicates whether peer needs approval
	ApprovalRequired bool `json:"approval_required"`

	// CityName Commonly used English name of the city
	CityName CityName `json:"city_name"`

	// Connected Peer to Management connection status
	Connected bool `json:"connected"`

	// ConnectionIp Peer's public connection IP address
	ConnectionIp string `json:"connection_ip"`

	// CountryCode 2-letter ISO 3166-1 alpha-2 code that represents the country
	CountryCode CountryCode `json:"country_code"`

	// CreatedAt Peer creation date (UTC)
	CreatedAt time.Time `json:"created_at"`

	// DisapprovalReason (Cloud only) Reason why the peer requires approval
	DisapprovalReason *string `json:"disapproval_reason,omitempty"`

	// DnsLabel Peer's DNS label is the parsed peer name for domain resolution. It is used to form an FQDN by appending the account's domain to the peer label. e.g. peer-dns-label.netbird.cloud
	DnsLabel string `json:"dns_label"`

	// Ephemeral Indicates whether the peer is ephemeral or not
	Ephemeral bool `json:"ephemeral"`

	// ExtraDnsLabels Extra DNS labels added to the peer
	ExtraDnsLabels []string `json:"extra_dns_labels"`

	// GeonameId Unique identifier from the GeoNames database for a specific geographical location.
	GeonameId int `json:"geoname_id"`

	// Groups Groups that the peer belongs to
	Groups []GroupMinimum `json:"groups"`

	// Hostname Hostname of the machine
	Hostname string `json:"hostname"`

	// Id Peer ID
	Id string `json:"id"`

	// InactivityExpirationEnabled Indicates whether peer inactivity expiration has been enabled or not
	InactivityExpirationEnabled bool `json:"inactivity_expiration_enabled"`

	// Ip Peer's IP address
	Ip string `json:"ip"`

	// Ipv6 Peer's IPv6 overlay address
	Ipv6 *string `json:"ipv6,omitempty"`

	// KernelVersion Peer's operating system kernel version
	KernelVersion string `json:"kernel_version"`

	// LastLogin Last time this peer performed log in (authentication). E.g., user authenticated.
	LastLogin time.Time `json:"last_login"`

	// LastSeen Last time peer connected to Netbird's management service
	LastSeen   time.Time       `json:"last_seen"`
	LocalFlags *PeerLocalFlags `json:"local_flags,omitempty"`

	// LoginExpirationEnabled Indicates whether peer login expiration has been enabled or not
	LoginExpirationEnabled bool `json:"login_expiration_enabled"`

	// LoginExpired Indicates whether peer's login expired or not
	LoginExpired bool `json:"login_expired"`

	// Name Peer's hostname
	Name string `json:"name"`

	// Os Peer's operating system and version
	Os string `json:"os"`

	// SerialNumber System serial number
	SerialNumber string `json:"serial_number"`

	// SshEnabled Indicates whether SSH server is enabled on this peer
	SshEnabled bool `json:"ssh_enabled"`

	// UiVersion Peer's desktop UI version
	UiVersion string `json:"ui_version"`

	// UserId User ID of the user that enrolled this peer
	UserId string `json:"user_id"`

	// Version Peer's daemon or cli version
	Version string `json:"version"`
}

// PeerLocalFlags defines model for PeerLocalFlags.
type PeerLocalFlags struct {
	// BlockInbound Indicates whether inbound traffic is blocked on this peer
	BlockInbound *bool `json:"block_inbound,omitempty"`

	// BlockLanAccess Indicates whether LAN access is blocked on this peer when used as a routing peer
	BlockLanAccess *bool `json:"block_lan_access,omitempty"`

	// DisableClientRoutes Indicates whether client routes are disabled on this peer or not
	DisableClientRoutes *bool `json:"disable_client_routes,omitempty"`

	// DisableDns Indicates whether DNS management is disabled on this peer or not
	DisableDns *bool `json:"disable_dns,omitempty"`

	// DisableFirewall Indicates whether firewall management is disabled on this peer or not
	DisableFirewall *bool `json:"disable_firewall,omitempty"`

	// DisableServerRoutes Indicates whether server routes are disabled on this peer or not
	DisableServerRoutes *bool `json:"disable_server_routes,omitempty"`

	// LazyConnectionEnabled Indicates whether lazy connection is enabled on this peer
	LazyConnectionEnabled *bool `json:"lazy_connection_enabled,omitempty"`

	// RosenpassEnabled Indicates whether Rosenpass is enabled on this peer
	RosenpassEnabled *bool `json:"rosenpass_enabled,omitempty"`

	// RosenpassPermissive Indicates whether Rosenpass is in permissive mode or not
	RosenpassPermissive *bool `json:"rosenpass_permissive,omitempty"`

	// ServerSshAllowed Indicates whether SSH access this peer is allowed or not
	ServerSshAllowed *bool `json:"server_ssh_allowed,omitempty"`
}

// PeerMinimum defines model for PeerMinimum.
type PeerMinimum struct {
	// Id Peer ID
	Id string `json:"id"`

	// Name Peer's hostname
	Name string `json:"name"`
}

// PeerNetworkRangeCheck Posture check for allow or deny access based on the peer's IP addresses. A range matches when it
// contains any of the peer's local network interface IPs or its public connection (NAT egress) IP,
// so ranges may target private subnets, public CIDRs, or single hosts via a /32 or /128.
type PeerNetworkRangeCheck struct {
	// Action Action to take upon policy match
	Action PeerNetworkRangeCheckAction `json:"action"`

	// Ranges List of network ranges in CIDR notation, matched against the peer's local interface IPs and its public connection IP
	Ranges []string `json:"ranges"`
}

// PeerNetworkRangeCheckAction Action to take upon policy match
type PeerNetworkRangeCheckAction string

// PeerRequest defines model for PeerRequest.
type PeerRequest struct {
	// ApprovalRequired (Cloud only) Indicates whether peer needs approval
	ApprovalRequired            *bool `json:"approval_required,omitempty"`
	InactivityExpirationEnabled bool  `json:"inactivity_expiration_enabled"`

	// Ip Peer's IP address
	Ip *string `json:"ip,omitempty"`

	// Ipv6 Peer's IPv6 overlay address. Omitted if IPv6 is not enabled for the account.
	Ipv6                   *string `json:"ipv6,omitempty"`
	LoginExpirationEnabled bool    `json:"login_expiration_enabled"`
	Name                   string  `json:"name"`
	SshEnabled             bool    `json:"ssh_enabled"`
}

// PeerTemporaryAccessRequest defines model for PeerTemporaryAccessRequest.
type PeerTemporaryAccessRequest struct {
	// Name Peer's hostname
	Name string `json:"name"`

	// Rules List of temporary access rules
	Rules []string `json:"rules"`

	// WgPubKey Peer's WireGuard public key
	WgPubKey string `json:"wg_pub_key"`
}

// PeerTemporaryAccessResponse defines model for PeerTemporaryAccessResponse.
type PeerTemporaryAccessResponse struct {
	// Id Peer ID
	Id string `json:"id"`

	// Name Peer's hostname
	Name string `json:"name"`

	// Rules List of temporary access rules
	Rules []string `json:"rules"`
}

// PersonalAccessToken defines model for PersonalAccessToken.
type PersonalAccessToken struct {
	// CreatedAt Date the token was created
	CreatedAt time.Time `json:"created_at"`

	// CreatedBy User ID of the user who created the token
	CreatedBy string `json:"created_by"`

	// ExpirationDate Date the token expires
	ExpirationDate time.Time `json:"expiration_date"`

	// Id ID of a token
	Id string `json:"id"`

	// LastUsed Date the token was last used
	LastUsed *time.Time `json:"last_used,omitempty"`

	// Name Name of the token
	Name string `json:"name"`
}

// PersonalAccessTokenGenerated defines model for PersonalAccessTokenGenerated.
type PersonalAccessTokenGenerated struct {
	PersonalAccessToken PersonalAccessToken `json:"personal_access_token"`

	// PlainToken Plain text representation of the generated token
	PlainToken string `json:"plain_token"`
}

// PersonalAccessTokenRequest defines model for PersonalAccessTokenRequest.
type PersonalAccessTokenRequest struct {
	// ExpiresIn Expiration in days
	ExpiresIn int `json:"expires_in"`

	// Name Name of the token
	Name string `json:"name"`
}

// Policy defines model for Policy.
type Policy struct {
	// Description Policy friendly description
	Description *string `json:"description,omitempty"`

	// Enabled Policy status
	Enabled bool `json:"enabled"`

	// Id Policy ID
	Id *string `json:"id,omitempty"`

	// Name Policy name identifier
	Name string `json:"name"`

	// Rules Policy rule object for policy UI editor
	Rules []PolicyRule `json:"rules"`

	// SourcePostureChecks Posture checks ID's applied to policy source groups
	SourcePostureChecks []string `json:"source_posture_checks"`
}

// PolicyCreate defines model for PolicyCreate.
type PolicyCreate struct {
	// Description Policy friendly description
	Description *string `json:"description,omitempty"`

	// Enabled Policy status
	Enabled bool `json:"enabled"`

	// Name Policy name identifier
	Name string `json:"name"`

	// Rules Policy rule object for policy UI editor
	Rules []PolicyRuleUpdate `json:"rules"`

	// SourcePostureChecks Posture checks ID's applied to policy source groups
	SourcePostureChecks *[]string `json:"source_posture_checks,omitempty"`
}

// PolicyMinimum defines model for PolicyMinimum.
type PolicyMinimum struct {
	// Description Policy friendly description
	Description *string `json:"description,omitempty"`

	// Enabled Policy status
	Enabled bool `json:"enabled"`

	// Name Policy name identifier
	Name string `json:"name"`
}

// PolicyRule defines model for PolicyRule.
type PolicyRule struct {
	// Action Policy rule accept or drops packets
	Action PolicyRuleAction `json:"action"`

	// AuthorizedGroups Map of user group ids to a list of local users
	AuthorizedGroups *map[string][]string `json:"authorized_groups,omitempty"`

	// Bidirectional Define if the rule is applicable in both directions, sources, and destinations.
	Bidirectional bool `json:"bidirectional"`

	// Description Policy rule friendly description
	Description         *string   `json:"description,omitempty"`
	DestinationResource *Resource `json:"destinationResource,omitempty"`

	// Destinations Policy rule destination group IDs
	Destinations *[]GroupMinimum `json:"destinations,omitempty"`

	// Enabled Policy rule status
	Enabled bool `json:"enabled"`

	// Id Policy rule ID
	Id *string `json:"id,omitempty"`

	// Name Policy rule name identifier
	Name string `json:"name"`

	// PortRanges Policy rule affected ports ranges list
	PortRanges *[]RulePortRange `json:"port_ranges,omitempty"`

	// Ports Policy rule affected ports
	Ports *[]string `json:"ports,omitempty"`

	// Protocol Policy rule type of the traffic
	Protocol       PolicyRuleProtocol `json:"protocol"`
	SourceResource *Resource          `json:"sourceResource,omitempty"`

	// Sources Policy rule source group IDs
	Sources *[]GroupMinimum `json:"sources,omitempty"`
}

// PolicyRuleAction Policy rule accept or drops packets
type PolicyRuleAction string

// PolicyRuleProtocol Policy rule type of the traffic
type PolicyRuleProtocol string

// PolicyRuleMinimum defines model for PolicyRuleMinimum.
type PolicyRuleMinimum struct {
	// Action Policy rule accept or drops packets
	Action PolicyRuleMinimumAction `json:"action"`

	// AuthorizedGroups Map of user group ids to a list of local users
	AuthorizedGroups *map[string][]string `json:"authorized_groups,omitempty"`

	// Bidirectional Define if the rule is applicable in both directions, sources, and destinations.
	Bidirectional bool `json:"bidirectional"`

	// Description Policy rule friendly description
	Description *string `json:"description,omitempty"`

	// Enabled Policy rule status
	Enabled bool `json:"enabled"`

	// Name Policy rule name identifier
	Name string `json:"name"`

	// PortRanges Policy rule affected ports ranges list
	PortRanges *[]RulePortRange `json:"port_ranges,omitempty"`

	// Ports Policy rule affected ports
	Ports *[]string `json:"ports,omitempty"`

	// Protocol Policy rule type of the traffic
	Protocol PolicyRuleMinimumProtocol `json:"protocol"`
}

// PolicyRuleMinimumAction Policy rule accept or drops packets
type PolicyRuleMinimumAction string

// PolicyRuleMinimumProtocol Policy rule type of the traffic
type PolicyRuleMinimumProtocol string

// PolicyRuleUpdate defines model for PolicyRuleUpdate.
type PolicyRuleUpdate struct {
	// Action Policy rule accept or drops packets
	Action PolicyRuleUpdateAction `json:"action"`

	// AuthorizedGroups Map of user group ids to a list of local users
	AuthorizedGroups *map[string][]string `json:"authorized_groups,omitempty"`

	// Bidirectional Define if the rule is applicable in both directions, sources, and destinations.
	Bidirectional bool `json:"bidirectional"`

	// Description Policy rule friendly description
	Description         *string   `json:"description,omitempty"`
	DestinationResource *Resource `json:"destinationResource,omitempty"`

	// Destinations Policy rule destination group IDs
	Destinations *[]string `json:"destinations,omitempty"`

	// Enabled Policy rule status
	Enabled bool `json:"enabled"`

	// Id Policy rule ID
	Id *string `json:"id,omitempty"`

	// Name Policy rule name identifier
	Name string `json:"name"`

	// PortRanges Policy rule affected ports ranges list
	PortRanges *[]RulePortRange `json:"port_ranges,omitempty"`

	// Ports Policy rule affected ports
	Ports *[]string `json:"ports,omitempty"`

	// Protocol Policy rule type of the traffic
	Protocol       PolicyRuleUpdateProtocol `json:"protocol"`
	SourceResource *Resource                `json:"sourceResource,omitempty"`

	// Sources Policy rule source group IDs
	Sources *[]string `json:"sources,omitempty"`
}

// PolicyRuleUpdateAction Policy rule accept or drops packets
type PolicyRuleUpdateAction string

// PolicyRuleUpdateProtocol Policy rule type of the traffic
type PolicyRuleUpdateProtocol string

// PolicyUpdate defines model for PolicyUpdate.
type PolicyUpdate struct {
	// Description Policy friendly description
	Description *string `json:"description,omitempty"`

	// Enabled Policy status
	Enabled bool `json:"enabled"`

	// Name Policy name identifier
	Name string `json:"name"`

	// Rules Policy rule object for policy UI editor
	Rules []PolicyRuleUpdate `json:"rules"`

	// SourcePostureChecks Posture checks ID's applied to policy source groups
	SourcePostureChecks *[]string `json:"source_posture_checks,omitempty"`
}

// PortalResponse defines model for PortalResponse.
type PortalResponse struct {
	// SessionId The unique identifier for the customer portal session.
	SessionId string `json:"session_id"`

	// Url URL to redirect the user to the customer portal.
	Url string `json:"url"`
}

// PostureCheck defines model for PostureCheck.
type PostureCheck struct {
	// Checks List of objects that perform the actual checks
	Checks Checks `json:"checks"`

	// Description Posture check friendly description
	Description *string `json:"description,omitempty"`

	// Id Posture check ID
	Id string `json:"id"`

	// Name Posture check unique name identifier
	Name string `json:"name"`
}

// PostureCheckUpdate defines model for PostureCheckUpdate.
type PostureCheckUpdate struct {
	// Checks List of objects that perform the actual checks
	Checks *Checks `json:"checks,omitempty"`

	// Description Posture check friendly description
	Description string `json:"description"`

	// Name Posture check name identifier
	Name string `json:"name"`
}

// Price defines model for Price.
type Price struct {
	// Currency Currency code for this price.
	Currency string `json:"currency"`

	// Price Price amount in minor units (e.g., cents).
	Price int `json:"price"`

	// PriceId Unique identifier for the price.
	PriceId string `json:"price_id"`

	// Unit Unit of measurement for this price (e.g., per user).
	Unit string `json:"unit"`
}

// Process Describes the operational activity within a peer's system.
type Process struct {
	// LinuxPath Path to the process executable file in a Linux operating system
	LinuxPath *string `json:"linux_path,omitempty"`

	// MacPath Path to the process executable file in a Mac operating system
	MacPath *string `json:"mac_path,omitempty"`

	// WindowsPath Path to the process executable file in a Windows operating system
	WindowsPath *string `json:"windows_path,omitempty"`
}

// ProcessCheck Posture Check for binaries exist and are running in the peer’s system
type ProcessCheck struct {
	Processes []Process `json:"processes"`
}

// Product defines model for Product.
type Product struct {
	// Description Detailed description of the product.
	Description string `json:"description"`

	// Features List of features provided by the product.
	Features []string `json:"features"`

	// Free Indicates whether the product is free or not.
	Free bool `json:"free"`

	// Name Name of the product.
	Name string `json:"name"`

	// Prices List of prices for the product in different currencies
	Prices []Price `json:"prices"`
}

// ProxyAccessLog defines model for ProxyAccessLog.
type ProxyAccessLog struct {
	// AuthMethodUsed Authentication method used (e.g., password, pin, oidc)
	AuthMethodUsed *string `json:"auth_method_used,omitempty"`

	// BytesDownload Bytes downloaded (response body size)
	BytesDownload int64 `json:"bytes_download"`

	// BytesUpload Bytes uploaded (request body size)
	BytesUpload int64 `json:"bytes_upload"`

	// CityName City name from geolocation
	CityName *string `json:"city_name,omitempty"`

	// CountryCode Country code from geolocation
	CountryCode *string `json:"country_code,omitempty"`

	// DurationMs Duration of the request in milliseconds
	DurationMs int `json:"duration_ms"`

	// Host Host header of the request
	Host string `json:"host"`

	// Id Unique identifier for the access log entry
	Id string `json:"id"`

	// Metadata Extra context about the request (e.g. crowdsec_verdict)
	Metadata *map[string]string `json:"metadata,omitempty"`

	// Method HTTP method of the request
	Method string `json:"method"`

	// Path Path of the request
	Path string `json:"path"`

	// Protocol Protocol type: http, tcp, or udp
	Protocol *string `json:"protocol,omitempty"`

	// Reason Reason for the request result (e.g., authentication failure)
	Reason *string `json:"reason,omitempty"`

	// ServiceId ID of the service that handled the request
	ServiceId string `json:"service_id"`

	// SourceIp Source IP address of the request
	SourceIp *string `json:"source_ip,omitempty"`

	// StatusCode HTTP status code returned
	StatusCode int `json:"status_code"`

	// SubdivisionCode First-level administrative subdivision ISO code (e.g. state/province)
	SubdivisionCode *string `json:"subdivision_code,omitempty"`

	// Timestamp Timestamp when the request was made
	Timestamp time.Time `json:"timestamp"`

	// UserId ID of the authenticated user, if applicable
	UserId *string `json:"user_id,omitempty"`
}

// ProxyAccessLogsResponse defines model for ProxyAccessLogsResponse.
type ProxyAccessLogsResponse struct {
	// Data List of proxy access log entries
	Data []ProxyAccessLog `json:"data"`

	// Page Current page number
	Page int `json:"page"`

	// PageSize Number of items per page
	PageSize int `json:"page_size"`

	// TotalPages Total number of pages available
	TotalPages int `json:"total_pages"`

	// TotalRecords Total number of log records available
	TotalRecords int `json:"total_records"`
}

// ProxyCluster A proxy cluster represents a group of proxy nodes serving the same address
type ProxyCluster struct {
	// Address Cluster address used for CNAME targets
	Address string `json:"address"`

	// ConnectedProxies Number of proxy nodes currently connected (heartbeat within the active window)
	ConnectedProxies int `json:"connected_proxies"`

	// Id Unique identifier of a proxy in this cluster
	Id string `json:"id"`

	// Online Whether at least one proxy in the cluster has heartbeated within the active window
	Online bool `json:"online"`

	// Private True when at least one connected proxy in this cluster is running embedded in a netbird client (`netbird proxy`) and serving over a WireGuard tunnel. Lets the dashboard distinguish per-peer / private clusters from centralised ones.
	Private *bool `json:"private,omitempty"`

	// RequireSubdomain Whether services on this cluster must include a subdomain label
	RequireSubdomain *bool `json:"require_subdomain,omitempty"`

	// SupportsCrowdsec Whether all active proxies in the cluster have CrowdSec configured
	SupportsCrowdsec *bool `json:"supports_crowdsec,omitempty"`

	// SupportsCustomPorts Whether the cluster supports binding arbitrary TCP/UDP ports
	SupportsCustomPorts *bool `json:"supports_custom_ports,omitempty"`

	// Type Source of the proxy cluster. `account` clusters are owned and operated by the account (BYOP);
	// `shared` clusters are operated by NetBird and shared across accounts.
	Type ProxyClusterType `json:"type"`
}

// ProxyClusterType Source of the proxy cluster. `account` clusters are owned and operated by the account (BYOP);
// `shared` clusters are operated by NetBird and shared across accounts.
type ProxyClusterType string

// ProxyToken defines model for ProxyToken.
type ProxyToken struct {
	CreatedAt time.Time  `json:"created_at"`
	ExpiresAt *time.Time `json:"expires_at,omitempty"`
	Id        string     `json:"id"`
	LastUsed  *time.Time `json:"last_used,omitempty"`
	Name      string     `json:"name"`
	Revoked   bool       `json:"revoked"`
}

// ProxyTokenCreated defines model for ProxyTokenCreated.
type ProxyTokenCreated struct {
	CreatedAt time.Time  `json:"created_at"`
	ExpiresAt *time.Time `json:"expires_at,omitempty"`
	Id        string     `json:"id"`
	LastUsed  *time.Time `json:"last_used,omitempty"`
	Name      string     `json:"name"`

	// PlainToken The plain text token (shown only once)
	PlainToken string `json:"plain_token"`
	Revoked    bool   `json:"revoked"`
}

// ProxyTokenRequest defines model for ProxyTokenRequest.
type ProxyTokenRequest struct {
	// ExpiresIn Token expiration in seconds (0 = never expires)
	ExpiresIn *int `json:"expires_in,omitempty"`

	// Name Human-readable token name
	Name string `json:"name"`
}

// Resource defines model for Resource.
type Resource struct {
	// Id ID of the resource
	Id   string       `json:"id"`
	Type ResourceType `json:"type"`
}

// ResourceType defines model for ResourceType.
type ResourceType string

// ReverseProxyDomain defines model for ReverseProxyDomain.
type ReverseProxyDomain struct {
	// Domain Domain name
	Domain string `json:"domain"`

	// Id Domain ID
	Id string `json:"id"`

	// RequireSubdomain Whether a subdomain label is required in front of this domain. When true, the domain cannot be used bare.
	RequireSubdomain *bool `json:"require_subdomain,omitempty"`

	// SupportsCrowdsec Whether the proxy cluster has CrowdSec configured
	SupportsCrowdsec *bool `json:"supports_crowdsec,omitempty"`

	// SupportsCustomPorts Whether the cluster supports binding arbitrary TCP/UDP ports
	SupportsCustomPorts *bool `json:"supports_custom_ports,omitempty"`

	// SupportsPrivate Whether the proxy cluster supports private (NetBird-only) services. True when at least one connected proxy in the cluster runs embedded in a netbird client.
	SupportsPrivate *bool `json:"supports_private,omitempty"`

	// TargetCluster The proxy cluster this domain is validated against (only for custom domains)
	TargetCluster *string `json:"target_cluster,omitempty"`

	// Type Type of Reverse Proxy Domain
	Type ReverseProxyDomainType `json:"type"`

	// Validated Whether the domain has been validated
	Validated bool `json:"validated"`
}

// ReverseProxyDomainRequest defines model for ReverseProxyDomainRequest.
type ReverseProxyDomainRequest struct {
	// Domain Domain name
	Domain string `json:"domain"`

	// TargetCluster The proxy cluster this domain should be validated against
	TargetCluster string `json:"target_cluster"`
}

// ReverseProxyDomainType Type of Reverse Proxy Domain
type ReverseProxyDomainType string

// Route defines model for Route.
type Route struct {
	// AccessControlGroups Access control group identifier associated with route.
	AccessControlGroups *[]string `json:"access_control_groups,omitempty"`

	// Description Route description
	Description string `json:"description"`

	// Domains Domain list to be dynamically resolved. Max of 32 domains can be added per route configuration. Conflicts with network
	Domains *[]string `json:"domains,omitempty"`

	// Enabled Route status
	Enabled bool `json:"enabled"`

	// Groups Group IDs containing routing peers
	Groups []string `json:"groups"`

	// Id Route Id
	Id string `json:"id"`

	// KeepRoute Indicate if the route should be kept after a domain doesn't resolve that IP anymore
	KeepRoute bool `json:"keep_route"`

	// Masquerade Indicate if peer should masquerade traffic to this route's prefix
	Masquerade bool `json:"masquerade"`

	// Metric Route metric number. Lowest number has higher priority
	Metric int `json:"metric"`

	// Network Network range in CIDR format, Conflicts with domains
	Network *string `json:"network,omitempty"`

	// NetworkId Route network identifier, to group HA routes
	NetworkId string `json:"network_id"`

	// NetworkType Network type indicating if it is a domain route or a IPv4/IPv6 route
	NetworkType string `json:"network_type"`

	// Peer Peer Identifier associated with route. This property can not be set together with `peer_groups`
	Peer *string `json:"peer,omitempty"`

	// PeerGroups Peers Group Identifier associated with route. This property can not be set together with `peer`
	PeerGroups *[]string `json:"peer_groups,omitempty"`

	// SkipAutoApply Indicate if this exit node route (0.0.0.0/0) should skip auto-application for client routing
	SkipAutoApply *bool `json:"skip_auto_apply,omitempty"`
}

// RouteRequest defines model for RouteRequest.
type RouteRequest struct {
	// AccessControlGroups Access control group identifier associated with route.
	AccessControlGroups *[]string `json:"access_control_groups,omitempty"`

	// Description Route description
	Description string `json:"description"`

	// Domains Domain list to be dynamically resolved. Max of 32 domains can be added per route configuration. Conflicts with network
	Domains *[]string `json:"domains,omitempty"`

	// Enabled Route status
	Enabled bool `json:"enabled"`

	// Groups Group IDs containing routing peers
	Groups []string `json:"groups"`

	// KeepRoute Indicate if the route should be kept after a domain doesn't resolve that IP anymore
	KeepRoute bool `json:"keep_route"`

	// Masquerade Indicate if peer should masquerade traffic to this route's prefix
	Masquerade bool `json:"masquerade"`

	// Metric Route metric number. Lowest number has higher priority
	Metric int `json:"metric"`

	// Network Network range in CIDR format, Conflicts with domains
	Network *string `json:"network,omitempty"`

	// NetworkId Route network identifier, to group HA routes
	NetworkId string `json:"network_id"`

	// Peer Peer Identifier associated with route. This property can not be set together with `peer_groups`
	Peer *string `json:"peer,omitempty"`

	// PeerGroups Peers Group Identifier associated with route. This property can not be set together with `peer`
	PeerGroups *[]string `json:"peer_groups,omitempty"`

	// SkipAutoApply Indicate if this exit node route (0.0.0.0/0) should skip auto-application for client routing
	SkipAutoApply *bool `json:"skip_auto_apply,omitempty"`
}

// RulePortRange Policy rule affected ports range
type RulePortRange struct {
	// End The ending port of the range
	End int `json:"end"`

	// Start The starting port of the range
	Start int `json:"start"`
}

// ScimIntegration defines model for ScimIntegration.
type ScimIntegration struct {
	// AuthToken SCIM API token (full on creation, masked otherwise)
	AuthToken string `json:"auth_token"`

	// ConnectorId DEX connector ID for embedded IDP setups
	ConnectorId *string `json:"connector_id,omitempty"`

	// Enabled Whether the integration is enabled
	Enabled bool `json:"enabled"`

	// GroupPrefixes List of start_with string patterns for groups to sync
	GroupPrefixes []string `json:"group_prefixes"`

	// Id The unique identifier for the integration
	Id int64 `json:"id"`

	// LastSyncedAt Timestamp of when the integration was last synced
	LastSyncedAt time.Time `json:"last_synced_at"`

	// Prefix The connection prefix used for the SCIM provider
	Prefix string `json:"prefix"`

	// Provider Name of the SCIM identity provider
	Provider string `json:"provider"`

	// UserGroupPrefixes List of start_with string patterns for groups which users to sync
	UserGroupPrefixes []string `json:"user_group_prefixes"`
}

// ScimTokenResponse Response containing the regenerated SCIM token
type ScimTokenResponse struct {
	// AuthToken The newly generated SCIM API token
	AuthToken string `json:"auth_token"`
}

// SentinelOneMatchAttributes Attribute conditions to match when approving agents
type SentinelOneMatchAttributes struct {
	// ActiveThreats The maximum allowed number of active threats on the agent
	ActiveThreats *int `json:"active_threats,omitempty"`

	// EncryptedApplications Whether disk encryption is enabled on the agent
	EncryptedApplications *bool `json:"encrypted_applications,omitempty"`

	// FirewallEnabled Whether the agent firewall is enabled
	FirewallEnabled *bool `json:"firewall_enabled,omitempty"`

	// Infected Whether the agent is currently flagged as infected
	Infected *bool `json:"infected,omitempty"`

	// IsActive Whether the agent has been recently active and reporting
	IsActive *bool `json:"is_active,omitempty"`

	// IsUpToDate Whether the agent is running the latest available version
	IsUpToDate *bool `json:"is_up_to_date,omitempty"`

	// NetworkStatus The current network connectivity status of the device
	NetworkStatus *SentinelOneMatchAttributesNetworkStatus `json:"network_status,omitempty"`

	// OperationalState The current operational state of the agent
	OperationalState *string `json:"operational_state,omitempty"`
}

// SentinelOneMatchAttributesNetworkStatus The current network connectivity status of the device
type SentinelOneMatchAttributesNetworkStatus string

// Service defines model for Service.
type Service struct {
	// AccessGroups NetBird group IDs whose peers may reach this private service over the tunnel. Required when private=true; ignored otherwise. Mutually exclusive with bearer auth (SSO).
	AccessGroups *[]string `json:"access_groups,omitempty"`

	// AccessRestrictions Connection-level access restrictions based on IP address or geography. Applies to both HTTP and L4 services.
	AccessRestrictions *AccessRestrictions `json:"access_restrictions,omitempty"`
	Auth               ServiceAuthConfig   `json:"auth"`

	// Domain Domain for the service
	Domain string `json:"domain"`

	// Enabled Whether the service is enabled
	Enabled bool `json:"enabled"`

	// Id Service ID
	Id string `json:"id"`

	// ListenPort Port the proxy listens on (L4/TLS only)
	ListenPort *int        `json:"listen_port,omitempty"`
	Meta       ServiceMeta `json:"meta"`

	// Mode Service mode. "http" for L7 reverse proxy, "tcp"/"udp"/"tls" for L4 passthrough.
	Mode *ServiceMode `json:"mode,omitempty"`

	// Name Service name
	Name string `json:"name"`

	// PassHostHeader When true, the original client Host header is passed through to the backend instead of being rewritten to the backend's address
	PassHostHeader *bool `json:"pass_host_header,omitempty"`

	// PortAutoAssigned Whether the listen port was auto-assigned
	PortAutoAssigned *bool `json:"port_auto_assigned,omitempty"`

	// Private When true, the service is NetBird-only — its target points at a proxy cluster, inbound peers authenticate via their WireGuard tunnel identity (no OIDC), and an ACL policy is auto-generated from access_groups to the cluster's proxy-peer group. Requires mode=http.
	Private *bool `json:"private,omitempty"`

	// ProxyCluster The proxy cluster handling this service (derived from domain)
	ProxyCluster *string `json:"proxy_cluster,omitempty"`

	// RewriteRedirects When true, Location headers in backend responses are rewritten to replace the backend address with the public-facing domain
	RewriteRedirects *bool `json:"rewrite_redirects,omitempty"`

	// Targets List of target backends for this service
	Targets []ServiceTarget `json:"targets"`

	// Terminated Whether the service has been terminated. Terminated services cannot be updated. Services that violate the Terms of Service will be terminated.
	Terminated *bool `json:"terminated,omitempty"`
}

// ServiceMode Service mode. "http" for L7 reverse proxy, "tcp"/"udp"/"tls" for L4 passthrough.
type ServiceMode string

// ServiceAuthConfig defines model for ServiceAuthConfig.
type ServiceAuthConfig struct {
	BearerAuth   *BearerAuthConfig   `json:"bearer_auth,omitempty"`
	HeaderAuths  *[]HeaderAuthConfig `json:"header_auths,omitempty"`
	LinkAuth     *LinkAuthConfig     `json:"link_auth,omitempty"`
	PasswordAuth *PasswordAuthConfig `json:"password_auth,omitempty"`
	PinAuth      *PINAuthConfig      `json:"pin_auth,omitempty"`
}

// ServiceMeta defines model for ServiceMeta.
type ServiceMeta struct {
	// CertificateIssuedAt Timestamp when the certificate was issued (empty if not yet issued)
	CertificateIssuedAt *time.Time `json:"certificate_issued_at,omitempty"`

	// CreatedAt Timestamp when the service was created
	CreatedAt time.Time `json:"created_at"`

	// Status Current status of the service
	Status ServiceMetaStatus `json:"status"`
}

// ServiceMetaStatus Current status of the service
type ServiceMetaStatus string

// ServiceRequest defines model for ServiceRequest.
type ServiceRequest struct {
	// AccessGroups NetBird group IDs whose peers may reach this private service over the tunnel. Required when private=true; ignored otherwise. Mutually exclusive with bearer auth (SSO).
	AccessGroups *[]string `json:"access_groups,omitempty"`

	// AccessRestrictions Connection-level access restrictions based on IP address or geography. Applies to both HTTP and L4 services.
	AccessRestrictions *AccessRestrictions `json:"access_restrictions,omitempty"`
	Auth               *ServiceAuthConfig  `json:"auth,omitempty"`

	// Domain Domain for the service
	Domain string `json:"domain"`

	// Enabled Whether the service is enabled
	Enabled bool `json:"enabled"`

	// ListenPort Port the proxy listens on (L4/TLS only). Set to 0 for auto-assignment.
	ListenPort *int `json:"listen_port,omitempty"`

	// Mode Service mode. "http" for L7 reverse proxy, "tcp"/"udp"/"tls" for L4 passthrough.
	Mode *ServiceRequestMode `json:"mode,omitempty"`

	// Name Service name
	Name string `json:"name"`

	// PassHostHeader When true, the original client Host header is passed through to the backend instead of being rewritten to the backend's address
	PassHostHeader *bool `json:"pass_host_header,omitempty"`

	// Private When true, the service is NetBird-only — its target points at a proxy cluster, inbound peers authenticate via their WireGuard tunnel identity (no OIDC), and an ACL policy is auto-generated from access_groups to the cluster's proxy-peer group. Requires mode=http.
	Private *bool `json:"private,omitempty"`

	// RewriteRedirects When true, Location headers in backend responses are rewritten to replace the backend address with the public-facing domain
	RewriteRedirects *bool `json:"rewrite_redirects,omitempty"`

	// Targets List of target backends for this service
	Targets *[]ServiceTarget `json:"targets,omitempty"`
}

// ServiceRequestMode Service mode. "http" for L7 reverse proxy, "tcp"/"udp"/"tls" for L4 passthrough.
type ServiceRequestMode string

// ServiceTarget defines model for ServiceTarget.
type ServiceTarget struct {
	// Enabled Whether this target is enabled
	Enabled bool `json:"enabled"`

	// Host Backend ip or domain for this target
	Host    *string               `json:"host,omitempty"`
	Options *ServiceTargetOptions `json:"options,omitempty"`

	// Path URL path prefix for this target (HTTP only)
	Path *string `json:"path,omitempty"`

	// Port Backend port for this target
	Port int `json:"port"`

	// Protocol Protocol to use when connecting to the backend
	Protocol ServiceTargetProtocol `json:"protocol"`

	// TargetId Target ID
	TargetId string `json:"target_id"`

	// TargetType Target type
	TargetType ServiceTargetTargetType `json:"target_type"`
}

// ServiceTargetProtocol Protocol to use when connecting to the backend
type ServiceTargetProtocol string

// ServiceTargetTargetType Target type
type ServiceTargetTargetType string

// ServiceTargetOptions defines model for ServiceTargetOptions.
type ServiceTargetOptions struct {
	// CustomHeaders Extra headers sent to the backend. Hop-by-hop and proxy-managed headers (Host, Connection, Transfer-Encoding, etc.) are rejected.
	CustomHeaders *map[string]string `json:"custom_headers,omitempty"`

	// DirectUpstream When true, the proxy dials this target via the host's network stack
	// instead of through its embedded NetBird client. Use for upstreams
	// reachable without WireGuard (public APIs, LAN services, localhost
	// sidecars).
	DirectUpstream *bool `json:"direct_upstream,omitempty"`

	// PathRewrite Controls how the request path is rewritten before forwarding to the backend. Default strips the matched prefix. "preserve" keeps the full original request path.
	PathRewrite *ServiceTargetOptionsPathRewrite `json:"path_rewrite,omitempty"`

	// ProxyProtocol Send PROXY Protocol v2 header to this backend (TCP/TLS only)
	ProxyProtocol *bool `json:"proxy_protocol,omitempty"`

	// RequestTimeout Per-target response timeout as a Go duration string (e.g. "30s", "2m")
	RequestTimeout *string `json:"request_timeout,omitempty"`

	// SessionIdleTimeout Idle timeout before a UDP session is reaped, as a Go duration string (e.g. "30s", "2m").
	SessionIdleTimeout *string `json:"session_idle_timeout,omitempty"`

	// SkipTlsVerify Skip TLS certificate verification for this backend
	SkipTlsVerify *bool `json:"skip_tls_verify,omitempty"`
}

// ServiceTargetOptionsPathRewrite Controls how the request path is rewritten before forwarding to the backend. Default strips the matched prefix. "preserve" keeps the full original request path.
type ServiceTargetOptionsPathRewrite string

// SetupKey defines model for SetupKey.
type SetupKey struct {
	// AllowExtraDnsLabels Allow extra DNS labels to be added to the peer
	AllowExtraDnsLabels bool `json:"allow_extra_dns_labels"`

	// AutoGroups List of group IDs to auto-assign to peers registered with this key
	AutoGroups []string `json:"auto_groups"`

	// Ephemeral Indicate that the peer will be ephemeral or not
	Ephemeral bool `json:"ephemeral"`

	// Expires Setup Key expiration date
	Expires time.Time `json:"expires"`

	// Id Setup Key ID
	Id string `json:"id"`

	// Key Setup Key as secret
	Key string `json:"key"`

	// LastUsed Setup key last usage date
	LastUsed time.Time `json:"last_used"`

	// Name Setup key name identifier
	Name string `json:"name"`

	// Revoked Setup key revocation status
	Revoked bool `json:"revoked"`

	// State Setup key status, "valid", "overused","expired" or "revoked"
	State string `json:"state"`

	// Type Setup key type, one-off for single time usage and reusable
	Type string `json:"type"`

	// UpdatedAt Setup key last update date
	UpdatedAt time.Time `json:"updated_at"`

	// UsageLimit A number of times this key can be used. The value of 0 indicates the unlimited usage.
	UsageLimit int `json:"usage_limit"`

	// UsedTimes Usage count of setup key
	UsedTimes int `json:"used_times"`

	// Valid Setup key validity status
	Valid bool `json:"valid"`
}

// SetupKeyBase defines model for SetupKeyBase.
type SetupKeyBase struct {
	// AllowExtraDnsLabels Allow extra DNS labels to be added to the peer
	AllowExtraDnsLabels bool `json:"allow_extra_dns_labels"`

	// AutoGroups List of group IDs to auto-assign to peers registered with this key
	AutoGroups []string `json:"auto_groups"`

	// Ephemeral Indicate that the peer will be ephemeral or not
	Ephemeral bool `json:"ephemeral"`

	// Expires Setup Key expiration date
	Expires time.Time `json:"expires"`

	// Id Setup Key ID
	Id string `json:"id"`

	// LastUsed Setup key last usage date
	LastUsed time.Time `json:"last_used"`

	// Name Setup key name identifier
	Name string `json:"name"`

	// Revoked Setup key revocation status
	Revoked bool `json:"revoked"`

	// State Setup key status, "valid", "overused","expired" or "revoked"
	State string `json:"state"`

	// Type Setup key type, one-off for single time usage and reusable
	Type string `json:"type"`

	// UpdatedAt Setup key last update date
	UpdatedAt time.Time `json:"updated_at"`

	// UsageLimit A number of times this key can be used. The value of 0 indicates the unlimited usage.
	UsageLimit int `json:"usage_limit"`

	// UsedTimes Usage count of setup key
	UsedTimes int `json:"used_times"`

	// Valid Setup key validity status
	Valid bool `json:"valid"`
}

// SetupKeyClear defines model for SetupKeyClear.
type SetupKeyClear struct {
	// AllowExtraDnsLabels Allow extra DNS labels to be added to the peer
	AllowExtraDnsLabels bool `json:"allow_extra_dns_labels"`

	// AutoGroups List of group IDs to auto-assign to peers registered with this key
	AutoGroups []string `json:"auto_groups"`

	// Ephemeral Indicate that the peer will be ephemeral or not
	Ephemeral bool `json:"ephemeral"`

	// Expires Setup Key expiration date
	Expires time.Time `json:"expires"`

	// Id Setup Key ID
	Id string `json:"id"`

	// Key Setup Key as plain text
	Key string `json:"key"`

	// LastUsed Setup key last usage date
	LastUsed time.Time `json:"last_used"`

	// Name Setup key name identifier
	Name string `json:"name"`

	// Revoked Setup key revocation status
	Revoked bool `json:"revoked"`

	// State Setup key status, "valid", "overused","expired" or "revoked"
	State string `json:"state"`

	// Type Setup key type, one-off for single time usage and reusable
	Type string `json:"type"`

	// UpdatedAt Setup key last update date
	UpdatedAt time.Time `json:"updated_at"`

	// UsageLimit A number of times this key can be used. The value of 0 indicates the unlimited usage.
	UsageLimit int `json:"usage_limit"`

	// UsedTimes Usage count of setup key
	UsedTimes int `json:"used_times"`

	// Valid Setup key validity status
	Valid bool `json:"valid"`
}

// SetupKeyRequest defines model for SetupKeyRequest.
type SetupKeyRequest struct {
	// AutoGroups List of group IDs to auto-assign to peers registered with this key
	AutoGroups []string `json:"auto_groups"`

	// Revoked Setup key revocation status
	Revoked bool `json:"revoked"`
}

// SetupRequest Request to set up the initial admin user
type SetupRequest struct {
	// CreatePat If true and the server has setup-time PAT issuance enabled (NB_SETUP_PAT_ENABLED=true), create a Personal Access Token for the new owner user and return it in the response. Ignored when the server feature is disabled.
	CreatePat *bool `json:"create_pat,omitempty"`

	// Email Email address for the admin user
	Email string `json:"email"`

	// Name Display name for the admin user (defaults to email if not provided)
	Name string `json:"name"`

	// Password Password for the admin user (minimum 8 characters)
	Password string `json:"password"`

	// PatExpireIn Expiration of the Personal Access Token in days. Applies only when create_pat is true and the server feature is enabled. Defaults to 1 day when omitted.
	PatExpireIn *int `json:"pat_expire_in,omitempty"`
}

// SetupResponse Response after successful instance setup
type SetupResponse struct {
	// Email Email address of the created user
	Email string `json:"email"`

	// PersonalAccessToken Plain text Personal Access Token created during setup. Present only when create_pat was requested and the NB_SETUP_PAT_ENABLED feature was enabled on the server.
	PersonalAccessToken *string `json:"personal_access_token,omitempty"`

	// UserId The ID of the created user
	UserId string `json:"user_id"`
}

// Subscription defines model for Subscription.
type Subscription struct {
	// Active Indicates whether the subscription is active or not.
	Active bool `json:"active"`

	// Currency Currency code of the subscription.
	Currency string `json:"currency"`

	// Features List of features included in the subscription.
	Features *[]string `json:"features,omitempty"`

	// PlanTier The tier of the plan for the subscription.
	PlanTier string `json:"plan_tier"`

	// Price Price amount in minor units (e.g., cents).
	Price int `json:"price"`

	// PriceId Unique identifier for the price of the subscription.
	PriceId string `json:"price_id"`

	// Provider The provider of the subscription.
	Provider string `json:"provider"`

	// RemainingTrial The remaining time for the trial period, in seconds.
	RemainingTrial *int `json:"remaining_trial,omitempty"`

	// UpdatedAt The date and time when the subscription was last updated.
	UpdatedAt time.Time `json:"updated_at"`
}

// SyncResult Response for a manual sync trigger
type SyncResult struct {
	Result *string `json:"result,omitempty"`
}

// TenantGroupResponse defines model for TenantGroupResponse.
type TenantGroupResponse struct {
	// Id The Group ID
	Id string `json:"id"`

	// Role The Role name
	Role string `json:"role"`
}

// TenantResponse defines model for TenantResponse.
type TenantResponse struct {
	// ActivatedAt The date and time when the tenant was activated.
	ActivatedAt *time.Time `json:"activated_at,omitempty"`

	// CreatedAt The date and time when the tenant was created.
	CreatedAt time.Time `json:"created_at"`

	// DnsChallenge The DNS challenge to set in a TXT record
	DnsChallenge string `json:"dns_challenge"`

	// Domain The tenant account domain
	Domain string `json:"domain"`

	// Groups MSP users Groups that can access the Tenant and Roles to assume
	Groups []TenantGroupResponse `json:"groups"`

	// Id The updated MSP tenant account ID
	Id string `json:"id"`

	// InvitedAt The date and time when the existing tenant was invited.
	InvitedAt *time.Time `json:"invited_at,omitempty"`

	// Name The name for the MSP tenant
	Name string `json:"name"`

	// Status The status of the tenant
	Status TenantResponseStatus `json:"status"`

	// UpdatedAt The date and time when the tenant was last updated.
	UpdatedAt time.Time `json:"updated_at"`
}

// TenantResponseStatus The status of the tenant
type TenantResponseStatus string

// UpdateAzureIntegrationRequest defines model for UpdateAzureIntegrationRequest.
type UpdateAzureIntegrationRequest struct {
	// ClientId Azure AD application (client) ID
	ClientId *string `json:"client_id,omitempty"`

	// ClientSecret Base64-encoded Azure AD client secret
	ClientSecret *string `json:"client_secret,omitempty"`

	// ConnectorId DEX connector ID for embedded IDP setups
	ConnectorId *string `json:"connector_id,omitempty"`

	// Enabled Whether the integration is enabled
	Enabled *bool `json:"enabled,omitempty"`

	// GroupPrefixes List of start_with string patterns for groups to sync
	GroupPrefixes *[]string `json:"group_prefixes,omitempty"`

	// SyncInterval Sync interval in seconds (minimum 300)
	SyncInterval *int `json:"sync_interval,omitempty"`

	// TenantId Azure AD tenant ID
	TenantId *string `json:"tenant_id,omitempty"`

	// UserGroupPrefixes List of start_with string patterns for groups which users to sync
	UserGroupPrefixes *[]string `json:"user_group_prefixes,omitempty"`
}

// UpdateGoogleIntegrationRequest defines model for UpdateGoogleIntegrationRequest.
type UpdateGoogleIntegrationRequest struct {
	// ConnectorId DEX connector ID for embedded IDP setups
	ConnectorId *string `json:"connector_id,omitempty"`

	// CustomerId Customer ID from Google Workspace Account Settings
	CustomerId *string `json:"customer_id,omitempty"`

	// Enabled Whether the integration is enabled
	Enabled *bool `json:"enabled,omitempty"`

	// GroupPrefixes List of start_with string patterns for groups to sync
	GroupPrefixes *[]string `json:"group_prefixes,omitempty"`

	// ServiceAccountKey Base64-encoded Google service account key
	ServiceAccountKey *string `json:"service_account_key,omitempty"`

	// SyncInterval Sync interval in seconds (minimum 300)
	SyncInterval *int `json:"sync_interval,omitempty"`

	// UserGroupPrefixes List of start_with string patterns for groups which users to sync
	UserGroupPrefixes *[]string `json:"user_group_prefixes,omitempty"`
}

// UpdateOktaScimIntegrationRequest defines model for UpdateOktaScimIntegrationRequest.
type UpdateOktaScimIntegrationRequest struct {
	// ConnectorId DEX connector ID for embedded IDP setups
	ConnectorId *string `json:"connector_id,omitempty"`

	// Enabled Whether the integration is enabled
	Enabled *bool `json:"enabled,omitempty"`

	// GroupPrefixes List of start_with string patterns for groups to sync
	GroupPrefixes *[]string `json:"group_prefixes,omitempty"`

	// UserGroupPrefixes List of start_with string patterns for groups which users to sync
	UserGroupPrefixes *[]string `json:"user_group_prefixes,omitempty"`
}

// UpdateScimIntegrationRequest defines model for UpdateScimIntegrationRequest.
type UpdateScimIntegrationRequest struct {
	// ConnectorId DEX connector ID for embedded IDP setups
	ConnectorId *string `json:"connector_id,omitempty"`

	// Enabled Whether the integration is enabled
	Enabled *bool `json:"enabled,omitempty"`

	// GroupPrefixes List of start_with string patterns for groups to sync
	GroupPrefixes *[]string `json:"group_prefixes,omitempty"`

	// Prefix The connection prefix used for the SCIM provider
	Prefix *string `json:"prefix,omitempty"`

	// UserGroupPrefixes List of start_with string patterns for groups which users to sync
	UserGroupPrefixes *[]string `json:"user_group_prefixes,omitempty"`
}

// UpdateTenantRequest defines model for UpdateTenantRequest.
type UpdateTenantRequest struct {
	// Groups MSP users Groups that can access the Tenant and Roles to assume
	Groups []TenantGroupResponse `json:"groups"`

	// Name The name for the MSP tenant
	Name string `json:"name"`
}

// UsageStats defines model for UsageStats.
type UsageStats struct {
	// ActivePeers Number of active peers.
	ActivePeers int64 `json:"active_peers"`

	// ActiveUsers Number of active users.
	ActiveUsers int64 `json:"active_users"`

	// TotalPeers Total number of peers.
	TotalPeers int64 `json:"total_peers"`

	// TotalUsers Total number of users.
	TotalUsers int64 `json:"total_users"`
}

// User defines model for User.
type User struct {
	// AutoGroups Group IDs to auto-assign to peers registered by this user
	AutoGroups []string `json:"auto_groups"`

	// Email User's email address
	Email string `json:"email"`

	// Id User ID
	Id string `json:"id"`

	// IdpId Identity provider ID (connector ID) that the user authenticated with. Only populated for users with Dex-encoded user IDs.
	IdpId *string `json:"idp_id,omitempty"`

	// IsBlocked Is true if this user is blocked. Blocked users can't use the system
	IsBlocked bool `json:"is_blocked"`

	// IsCurrent Is true if authenticated user is the same as this user
	IsCurrent *bool `json:"is_current,omitempty"`

	// IsServiceUser Is true if this user is a service user
	IsServiceUser *bool `json:"is_service_user,omitempty"`

	// Issued How user was issued by API or Integration
	Issued *string `json:"issued,omitempty"`

	// LastLogin Last time this user performed a login to the dashboard
	LastLogin *time.Time `json:"last_login,omitempty"`

	// Name User's name from idp provider
	Name string `json:"name"`

	// Password User's password. Only present when user is created (create user endpoint is called) and only when IdP supports user creation with password.
	Password *string `json:"password,omitempty"`

	// PendingApproval Is true if this user requires approval before being activated. Only applicable for users joining via domain matching when user_approval_required is enabled.
	PendingApproval bool             `json:"pending_approval"`
	Permissions     *UserPermissions `json:"permissions,omitempty"`

	// Role User's NetBird account role
	Role string `json:"role"`

	// Status User's status
	Status UserStatus `json:"status"`
}

// UserStatus User's status
type UserStatus string

// UserCreateRequest defines model for UserCreateRequest.
type UserCreateRequest struct {
	// AutoGroups Group IDs to auto-assign to peers registered by this user
	AutoGroups []string `json:"auto_groups"`

	// Email User's Email to send invite to
	Email *string `json:"email,omitempty"`

	// IsServiceUser Is true if this user is a service user
	IsServiceUser bool `json:"is_service_user"`

	// Name User's full name
	Name *string `json:"name,omitempty"`

	// Role User's NetBird account role
	Role string `json:"role"`
}

// UserInvite A user invite
type UserInvite struct {
	// AutoGroups Group IDs to auto-assign to peers registered by this user
	AutoGroups []string `json:"auto_groups"`

	// CreatedAt Invite creation time
	CreatedAt time.Time `json:"created_at"`

	// Email User's email address
	Email string `json:"email"`

	// Expired Whether the invite has expired
	Expired bool `json:"expired"`

	// ExpiresAt Invite expiration time
	ExpiresAt time.Time `json:"expires_at"`

	// Id Invite ID
	Id string `json:"id"`

	// InviteToken The invite link to be shared with the user. Only returned when the invite is created or regenerated.
	InviteToken *string `json:"invite_token,omitempty"`

	// Name User's full name
	Name string `json:"name"`

	// Role User's NetBird account role
	Role string `json:"role"`
}

// UserInviteAcceptRequest Request to accept an invite and set password
type UserInviteAcceptRequest struct {
	// Password The password the user wants to set. Must be at least 8 characters long and contain at least one uppercase letter, one digit, and one special character (any character that is not a letter or digit, including spaces).
	Password string `json:"password"`
}

// UserInviteAcceptResponse Response after accepting an invite
type UserInviteAcceptResponse struct {
	// Success Whether the invite was accepted successfully
	Success bool `json:"success"`
}

// UserInviteCreateRequest Request to create a user invite link
type UserInviteCreateRequest struct {
	// AutoGroups Group IDs to auto-assign to peers registered by this user
	AutoGroups []string `json:"auto_groups"`

	// Email User's email address
	Email string `json:"email"`

	// ExpiresIn Invite expiration time in seconds (default 72 hours)
	ExpiresIn *int `json:"expires_in,omitempty"`

	// Name User's full name
	Name string `json:"name"`

	// Role User's NetBird account role
	Role string `json:"role"`
}

// UserInviteInfo Public information about an invite
type UserInviteInfo struct {
	// Email User's email address
	Email string `json:"email"`

	// ExpiresAt Invite expiration time
	ExpiresAt time.Time `json:"expires_at"`

	// InvitedBy Name of the user who sent the invite
	InvitedBy string `json:"invited_by"`

	// Name User's full name
	Name string `json:"name"`

	// Valid Whether the invite is still valid (not expired)
	Valid bool `json:"valid"`
}

// UserInviteRegenerateRequest Request to regenerate an invite link
type UserInviteRegenerateRequest struct {
	// ExpiresIn Invite expiration time in seconds (default 72 hours)
	ExpiresIn *int `json:"expires_in,omitempty"`
}

// UserInviteRegenerateResponse Response after regenerating an invite
type UserInviteRegenerateResponse struct {
	// InviteExpiresAt New invite expiration time
	InviteExpiresAt time.Time `json:"invite_expires_at"`

	// InviteToken The new invite token
	InviteToken string `json:"invite_token"`
}

// UserPermissions defines model for UserPermissions.
type UserPermissions struct {
	// IsRestricted Indicates whether this User's Peers view is restricted
	IsRestricted bool                       `json:"is_restricted"`
	Modules      map[string]map[string]bool `json:"modules"`
}

// UserRequest defines model for UserRequest.
type UserRequest struct {
	// AutoGroups Group IDs to auto-assign to peers registered by this user
	AutoGroups []string `json:"auto_groups"`

	// IsBlocked If set to true then user is blocked and can't use the system
	IsBlocked bool `json:"is_blocked"`

	// Role User's NetBird account role
	Role string `json:"role"`
}

// WebhookTarget Target configuration for webhook notification channels.
type WebhookTarget struct {
	// Headers Custom HTTP headers sent with each webhook request.
	// Values are write-only; in GET responses all values are masked.
	Headers *map[string]string `json:"headers,omitempty"`

	// Url The webhook endpoint URL to send notifications to.
	Url string `json:"url"`
}

// WorkloadRequest defines model for WorkloadRequest.
type WorkloadRequest struct {
	union json.RawMessage
}

// WorkloadResponse defines model for WorkloadResponse.
type WorkloadResponse struct {
	union json.RawMessage
}

// WorkloadType Identifies the type of workload the job will execute.
// Currently only `"bundle"` is supported.
type WorkloadType string

// Zone defines model for Zone.
type Zone struct {
	// DistributionGroups Group IDs that defines groups of peers that will resolve this zone
	DistributionGroups []string `json:"distribution_groups"`

	// Domain Zone domain (FQDN)
	Domain string `json:"domain"`

	// EnableSearchDomain Enable this zone as a search domain
	EnableSearchDomain bool `json:"enable_search_domain"`

	// Enabled Zone status
	Enabled bool `json:"enabled"`

	// Id Zone ID
	Id string `json:"id"`

	// Name Zone name identifier
	Name string `json:"name"`

	// Records DNS records associated with this zone
	Records []DNSRecord `json:"records"`
}

// ZoneRequest defines model for ZoneRequest.
type ZoneRequest struct {
	// DistributionGroups Group IDs that defines groups of peers that will resolve this zone
	DistributionGroups []string `json:"distribution_groups"`

	// Domain Zone domain (FQDN)
	Domain string `json:"domain"`

	// EnableSearchDomain Enable this zone as a search domain
	EnableSearchDomain bool `json:"enable_search_domain"`

	// Enabled Zone status
	Enabled *bool `json:"enabled,omitempty"`

	// Name Zone name identifier
	Name string `json:"name"`
}

// Conflict Standard error response. Note: The exact structure of this error response is inferred from `util.WriteErrorResponse` and `util.WriteError` usage in the provided Go code, as a specific Go struct for errors was not provided.
type Conflict = ErrorResponse

// bearerAuthContextKey is the context key for BearerAuth security scheme
type bearerAuthContextKey string

// tokenAuthContextKey is the context key for TokenAuth security scheme
type tokenAuthContextKey string

// GetApiAgentNetworkAccessLogSessionsParams defines parameters for GetApiAgentNetworkAccessLogSessions.
type GetApiAgentNetworkAccessLogSessionsParams struct {
	// Page Page number for pagination (1-indexed).
	Page *int `form:"page,omitempty" json:"page,omitempty"`

	// PageSize Number of sessions per page (max 100).
	PageSize *int `form:"page_size,omitempty" json:"page_size,omitempty"`

	// SortBy Session-level field to sort by. "timestamp" is the session's last activity, "started_at" its first.
	SortBy *GetApiAgentNetworkAccessLogSessionsParamsSortBy `form:"sort_by,omitempty" json:"sort_by,omitempty"`

	// SortOrder Sort order (ascending or descending).
	SortOrder *GetApiAgentNetworkAccessLogSessionsParamsSortOrder `form:"sort_order,omitempty" json:"sort_order,omitempty"`

	// Search General search across log ID, host, path, model, and user email/name.
	Search *string `form:"search,omitempty" json:"search,omitempty"`

	// UserId Filter by authenticated user ID.
	UserId *string `form:"user_id,omitempty" json:"user_id,omitempty"`

	// SessionId Filter to a single conversation / coding session id.
	SessionId *string `form:"session_id,omitempty" json:"session_id,omitempty"`

	// GroupId Filter by authorising group id. Repeat for multiple (matches any).
	GroupId *[]string `form:"group_id,omitempty" json:"group_id,omitempty"`

	// ProviderId Filter by resolved provider id. Repeat for multiple (matches any).
	ProviderId *[]string `form:"provider_id,omitempty" json:"provider_id,omitempty"`

	// Model Filter by model. Repeat for multiple (matches any).
	Model *[]string `form:"model,omitempty" json:"model,omitempty"`

	// Decision Filter by policy decision (e.g. allow, deny).
	Decision *string `form:"decision,omitempty" json:"decision,omitempty"`

	// Path Filter by request path prefix (matches entries whose path starts with this value).
	Path *string `form:"path,omitempty" json:"path,omitempty"`

	// StartDate Filter by timestamp >= start_date (RFC3339 format).
	StartDate *time.Time `form:"start_date,omitempty" json:"start_date,omitempty"`

	// EndDate Filter by timestamp <= end_date (RFC3339 format).
	EndDate *time.Time `form:"end_date,omitempty" json:"end_date,omitempty"`
}

// GetApiAgentNetworkAccessLogSessionsParamsSortBy defines parameters for GetApiAgentNetworkAccessLogSessions.
type GetApiAgentNetworkAccessLogSessionsParamsSortBy string

// GetApiAgentNetworkAccessLogSessionsParamsSortOrder defines parameters for GetApiAgentNetworkAccessLogSessions.
type GetApiAgentNetworkAccessLogSessionsParamsSortOrder string

// GetApiAgentNetworkAccessLogsParams defines parameters for GetApiAgentNetworkAccessLogs.
type GetApiAgentNetworkAccessLogsParams struct {
	// Page Page number for pagination (1-indexed).
	Page *int `form:"page,omitempty" json:"page,omitempty"`

	// PageSize Number of items per page (max 100).
	PageSize *int `form:"page_size,omitempty" json:"page_size,omitempty"`

	// SortBy Field to sort by.
	SortBy *GetApiAgentNetworkAccessLogsParamsSortBy `form:"sort_by,omitempty" json:"sort_by,omitempty"`

	// SortOrder Sort order (ascending or descending).
	SortOrder *GetApiAgentNetworkAccessLogsParamsSortOrder `form:"sort_order,omitempty" json:"sort_order,omitempty"`

	// Search General search across log ID, host, path, model, and user email/name.
	Search *string `form:"search,omitempty" json:"search,omitempty"`

	// UserId Filter by authenticated user ID.
	UserId *string `form:"user_id,omitempty" json:"user_id,omitempty"`

	// SessionId Filter to a single conversation / coding session id (groups all requests of one session).
	SessionId *string `form:"session_id,omitempty" json:"session_id,omitempty"`

	// GroupId Filter by authorising group id. Repeat for multiple (matches any).
	GroupId *[]string `form:"group_id,omitempty" json:"group_id,omitempty"`

	// ProviderId Filter by resolved provider id. Repeat for multiple (matches any).
	ProviderId *[]string `form:"provider_id,omitempty" json:"provider_id,omitempty"`

	// Model Filter by model. Repeat for multiple (matches any).
	Model *[]string `form:"model,omitempty" json:"model,omitempty"`

	// Decision Filter by policy decision (e.g. allow, deny).
	Decision *string `form:"decision,omitempty" json:"decision,omitempty"`

	// Path Filter by request path prefix (matches entries whose path starts with this value).
	Path *string `form:"path,omitempty" json:"path,omitempty"`

	// StartDate Filter by timestamp >= start_date (RFC3339 format).
	StartDate *time.Time `form:"start_date,omitempty" json:"start_date,omitempty"`

	// EndDate Filter by timestamp <= end_date (RFC3339 format).
	EndDate *time.Time `form:"end_date,omitempty" json:"end_date,omitempty"`
}

// GetApiAgentNetworkAccessLogsParamsSortBy defines parameters for GetApiAgentNetworkAccessLogs.
type GetApiAgentNetworkAccessLogsParamsSortBy string

// GetApiAgentNetworkAccessLogsParamsSortOrder defines parameters for GetApiAgentNetworkAccessLogs.
type GetApiAgentNetworkAccessLogsParamsSortOrder string

// GetApiAgentNetworkUsageOverviewParams defines parameters for GetApiAgentNetworkUsageOverview.
type GetApiAgentNetworkUsageOverviewParams struct {
	// Granularity Time bucket width. Defaults to day.
	Granularity *GetApiAgentNetworkUsageOverviewParamsGranularity `form:"granularity,omitempty" json:"granularity,omitempty"`

	// StartDate Filter by timestamp >= start_date (RFC3339 format).
	StartDate *time.Time `form:"start_date,omitempty" json:"start_date,omitempty"`

	// EndDate Filter by timestamp <= end_date (RFC3339 format).
	EndDate *time.Time `form:"end_date,omitempty" json:"end_date,omitempty"`

	// UserId Filter by user ID.
	UserId *string `form:"user_id,omitempty" json:"user_id,omitempty"`

	// SessionId Filter to a single conversation / coding session id.
	SessionId *string `form:"session_id,omitempty" json:"session_id,omitempty"`

	// GroupId Filter by authorising group id. Repeat for multiple (matches any).
	GroupId *[]string `form:"group_id,omitempty" json:"group_id,omitempty"`

	// ProviderId Filter by resolved provider id. Repeat for multiple (matches any).
	ProviderId *[]string `form:"provider_id,omitempty" json:"provider_id,omitempty"`

	// Model Filter by model. Repeat for multiple (matches any).
	Model *[]string `form:"model,omitempty" json:"model,omitempty"`
}

// GetApiAgentNetworkUsageOverviewParamsGranularity defines parameters for GetApiAgentNetworkUsageOverview.
type GetApiAgentNetworkUsageOverviewParamsGranularity string

// GetApiEventsNetworkTrafficParams defines parameters for GetApiEventsNetworkTraffic.
type GetApiEventsNetworkTrafficParams struct {
	// Page Page number
	Page *int `form:"page,omitempty" json:"page,omitempty"`

	// PageSize Number of items per page
	PageSize *int `form:"page_size,omitempty" json:"page_size,omitempty"`

	// UserId Filter by user ID
	UserId *string `form:"user_id,omitempty" json:"user_id,omitempty"`

	// ReporterId Filter by reporter ID
	ReporterId *string `form:"reporter_id,omitempty" json:"reporter_id,omitempty"`

	// SourceId Filter by source endpoint ID
	SourceId *string `form:"source_id,omitempty" json:"source_id,omitempty"`

	// DestinationId Filter by destination endpoint ID
	DestinationId *string `form:"destination_id,omitempty" json:"destination_id,omitempty"`

	// Protocol Filter by protocol
	Protocol *int `form:"protocol,omitempty" json:"protocol,omitempty"`

	// Type Filter by event type
	Type *GetApiEventsNetworkTrafficParamsType `form:"type,omitempty" json:"type,omitempty"`

	// ConnectionType Filter by connection type
	ConnectionType *GetApiEventsNetworkTrafficParamsConnectionType `form:"connection_type,omitempty" json:"connection_type,omitempty"`

	// Direction Filter by direction
	Direction *GetApiEventsNetworkTrafficParamsDirection `form:"direction,omitempty" json:"direction,omitempty"`

	// Search Case-insensitive partial match on user email, source/destination names, and source/destination addresses
	Search *string `form:"search,omitempty" json:"search,omitempty"`

	// StartDate Start date for filtering events (ISO 8601 format, e.g., 2024-01-01T00:00:00Z).
	StartDate *time.Time `form:"start_date,omitempty" json:"start_date,omitempty"`

	// EndDate End date for filtering events (ISO 8601 format, e.g., 2024-01-31T23:59:59Z).
	EndDate *time.Time `form:"end_date,omitempty" json:"end_date,omitempty"`
}

// GetApiEventsNetworkTrafficParamsType defines parameters for GetApiEventsNetworkTraffic.
type GetApiEventsNetworkTrafficParamsType string

// GetApiEventsNetworkTrafficParamsConnectionType defines parameters for GetApiEventsNetworkTraffic.
type GetApiEventsNetworkTrafficParamsConnectionType string

// GetApiEventsNetworkTrafficParamsDirection defines parameters for GetApiEventsNetworkTraffic.
type GetApiEventsNetworkTrafficParamsDirection string

// GetApiEventsProxyParams defines parameters for GetApiEventsProxy.
type GetApiEventsProxyParams struct {
	// Page Page number for pagination (1-indexed)
	Page *int `form:"page,omitempty" json:"page,omitempty"`

	// PageSize Number of items per page (max 100)
	PageSize *int `form:"page_size,omitempty" json:"page_size,omitempty"`

	// SortBy Field to sort by (url sorts by host then path)
	SortBy *GetApiEventsProxyParamsSortBy `form:"sort_by,omitempty" json:"sort_by,omitempty"`

	// SortOrder Sort order (ascending or descending)
	SortOrder *GetApiEventsProxyParamsSortOrder `form:"sort_order,omitempty" json:"sort_order,omitempty"`

	// Search General search across request ID, host, path, source IP, user email, and user name
	Search *string `form:"search,omitempty" json:"search,omitempty"`

	// SourceIp Filter by source IP address
	SourceIp *string `form:"source_ip,omitempty" json:"source_ip,omitempty"`

	// Host Filter by host header
	Host *string `form:"host,omitempty" json:"host,omitempty"`

	// Path Filter by request path (supports partial matching)
	Path *string `form:"path,omitempty" json:"path,omitempty"`

	// UserId Filter by authenticated user ID
	UserId *string `form:"user_id,omitempty" json:"user_id,omitempty"`

	// UserEmail Filter by user email (partial matching)
	UserEmail *string `form:"user_email,omitempty" json:"user_email,omitempty"`

	// UserName Filter by user name (partial matching)
	UserName *string `form:"user_name,omitempty" json:"user_name,omitempty"`

	// Method Filter by HTTP method
	Method *GetApiEventsProxyParamsMethod `form:"method,omitempty" json:"method,omitempty"`

	// Status Filter by status (success = 2xx/3xx, failed = 1xx/4xx/5xx)
	Status *GetApiEventsProxyParamsStatus `form:"status,omitempty" json:"status,omitempty"`

	// StatusCode Filter by HTTP status code
	StatusCode *int `form:"status_code,omitempty" json:"status_code,omitempty"`

	// StartDate Filter by timestamp >= start_date (RFC3339 format)
	StartDate *time.Time `form:"start_date,omitempty" json:"start_date,omitempty"`

	// EndDate Filter by timestamp <= end_date (RFC3339 format)
	EndDate *time.Time `form:"end_date,omitempty" json:"end_date,omitempty"`
}

// GetApiEventsProxyParamsSortBy defines parameters for GetApiEventsProxy.
type GetApiEventsProxyParamsSortBy string

// GetApiEventsProxyParamsSortOrder defines parameters for GetApiEventsProxy.
type GetApiEventsProxyParamsSortOrder string

// GetApiEventsProxyParamsMethod defines parameters for GetApiEventsProxy.
type GetApiEventsProxyParamsMethod string

// GetApiEventsProxyParamsStatus defines parameters for GetApiEventsProxy.
type GetApiEventsProxyParamsStatus string

// GetApiGroupsParams defines parameters for GetApiGroups.
type GetApiGroupsParams struct {
	// Name Filter groups by name (exact match)
	Name *string `form:"name,omitempty" json:"name,omitempty"`
}

// PostApiIntegrationsBillingAwsMarketplaceActivateJSONBody defines parameters for PostApiIntegrationsBillingAwsMarketplaceActivate.
type PostApiIntegrationsBillingAwsMarketplaceActivateJSONBody struct {
	// PlanTier The plan tier to activate the subscription for.
	PlanTier string `json:"plan_tier"`
}

// PostApiIntegrationsBillingAwsMarketplaceEnrichJSONBody defines parameters for PostApiIntegrationsBillingAwsMarketplaceEnrich.
type PostApiIntegrationsBillingAwsMarketplaceEnrichJSONBody struct {
	// AwsUserId The AWS user ID.
	AwsUserId string `json:"aws_user_id"`
}

// PostApiIntegrationsBillingCheckoutJSONBody defines parameters for PostApiIntegrationsBillingCheckout.
type PostApiIntegrationsBillingCheckoutJSONBody struct {
	// BaseURL The base URL for the redirect after checkout.
	BaseURL string `json:"baseURL"`

	// EnableTrial Enables a 14-day trial for the account.
	EnableTrial *bool `json:"enableTrial,omitempty"`

	// PriceID The Price ID for checkout.
	PriceID string `json:"priceID"`
}

// GetApiIntegrationsBillingPortalParams defines parameters for GetApiIntegrationsBillingPortal.
type GetApiIntegrationsBillingPortalParams struct {
	// BaseURL The base URL for the redirect after accessing the portal.
	BaseURL string `form:"baseURL" json:"baseURL"`
}

// PutApiIntegrationsBillingSubscriptionJSONBody defines parameters for PutApiIntegrationsBillingSubscription.
type PutApiIntegrationsBillingSubscriptionJSONBody struct {
	// PlanTier The plan tier to change the subscription to.
	PlanTier *string `json:"plan_tier,omitempty"`

	// PriceID The Price ID to change the subscription to.
	PriceID *string `json:"priceID,omitempty"`
}

// PutApiIntegrationsMspTenantsIdInviteJSONBody defines parameters for PutApiIntegrationsMspTenantsIdInvite.
type PutApiIntegrationsMspTenantsIdInviteJSONBody struct {
	// Value Accept or decline the invitation.
	Value PutApiIntegrationsMspTenantsIdInviteJSONBodyValue `json:"value"`
}

// PutApiIntegrationsMspTenantsIdInviteJSONBodyValue defines parameters for PutApiIntegrationsMspTenantsIdInvite.
type PutApiIntegrationsMspTenantsIdInviteJSONBodyValue string

// PostApiIntegrationsMspTenantsIdSubscriptionJSONBody defines parameters for PostApiIntegrationsMspTenantsIdSubscription.
type PostApiIntegrationsMspTenantsIdSubscriptionJSONBody struct {
	// PriceID The Price ID to change the subscription to.
	PriceID string `json:"priceID"`
}

// PostApiIntegrationsMspTenantsIdUnlinkJSONBody defines parameters for PostApiIntegrationsMspTenantsIdUnlink.
type PostApiIntegrationsMspTenantsIdUnlinkJSONBody struct {
	// Owner The new owners user ID.
	Owner string `json:"owner"`
}

// GetApiPeersParams defines parameters for GetApiPeers.
type GetApiPeersParams struct {
	// Name Filter peers by name
	Name *string `form:"name,omitempty" json:"name,omitempty"`

	// Ip Filter peers by IP address
	Ip *string `form:"ip,omitempty" json:"ip,omitempty"`
}

// GetApiPeersPeerIdIngressPortsParams defines parameters for GetApiPeersPeerIdIngressPorts.
type GetApiPeersPeerIdIngressPortsParams struct {
	// Name Filters ingress port allocations by name
	Name *string `form:"name,omitempty" json:"name,omitempty"`
}

// GetApiUsersParams defines parameters for GetApiUsers.
type GetApiUsersParams struct {
	// ServiceUser Filters users and returns either regular users or service users
	ServiceUser *bool `form:"service_user,omitempty" json:"service_user,omitempty"`
}

// PutApiAccountsAccountIdJSONRequestBody defines body for PutApiAccountsAccountId for application/json ContentType.
type PutApiAccountsAccountIdJSONRequestBody = AccountRequest

// PostApiAgentNetworkBudgetRulesJSONRequestBody defines body for PostApiAgentNetworkBudgetRules for application/json ContentType.
type PostApiAgentNetworkBudgetRulesJSONRequestBody = AgentNetworkBudgetRuleRequest

// PutApiAgentNetworkBudgetRulesRuleIdJSONRequestBody defines body for PutApiAgentNetworkBudgetRulesRuleId for application/json ContentType.
type PutApiAgentNetworkBudgetRulesRuleIdJSONRequestBody = AgentNetworkBudgetRuleRequest

// PostApiAgentNetworkGuardrailsJSONRequestBody defines body for PostApiAgentNetworkGuardrails for application/json ContentType.
type PostApiAgentNetworkGuardrailsJSONRequestBody = AgentNetworkGuardrailRequest

// PutApiAgentNetworkGuardrailsGuardrailIdJSONRequestBody defines body for PutApiAgentNetworkGuardrailsGuardrailId for application/json ContentType.
type PutApiAgentNetworkGuardrailsGuardrailIdJSONRequestBody = AgentNetworkGuardrailRequest

// PostApiAgentNetworkPoliciesJSONRequestBody defines body for PostApiAgentNetworkPolicies for application/json ContentType.
type PostApiAgentNetworkPoliciesJSONRequestBody = AgentNetworkPolicyRequest

// PutApiAgentNetworkPoliciesPolicyIdJSONRequestBody defines body for PutApiAgentNetworkPoliciesPolicyId for application/json ContentType.
type PutApiAgentNetworkPoliciesPolicyIdJSONRequestBody = AgentNetworkPolicyRequest

// PostApiAgentNetworkProvidersJSONRequestBody defines body for PostApiAgentNetworkProviders for application/json ContentType.
type PostApiAgentNetworkProvidersJSONRequestBody = AgentNetworkProviderRequest

// PutApiAgentNetworkProvidersProviderIdJSONRequestBody defines body for PutApiAgentNetworkProvidersProviderId for application/json ContentType.
type PutApiAgentNetworkProvidersProviderIdJSONRequestBody = AgentNetworkProviderRequest

// PutApiAgentNetworkSettingsJSONRequestBody defines body for PutApiAgentNetworkSettings for application/json ContentType.
type PutApiAgentNetworkSettingsJSONRequestBody = AgentNetworkSettingsRequest

// PostApiDnsNameserversJSONRequestBody defines body for PostApiDnsNameservers for application/json ContentType.
type PostApiDnsNameserversJSONRequestBody = NameserverGroupRequest

// PutApiDnsNameserversNsgroupIdJSONRequestBody defines body for PutApiDnsNameserversNsgroupId for application/json ContentType.
type PutApiDnsNameserversNsgroupIdJSONRequestBody = NameserverGroupRequest

// PutApiDnsSettingsJSONRequestBody defines body for PutApiDnsSettings for application/json ContentType.
type PutApiDnsSettingsJSONRequestBody = DNSSettings

// PostApiDnsZonesJSONRequestBody defines body for PostApiDnsZones for application/json ContentType.
type PostApiDnsZonesJSONRequestBody = ZoneRequest

// PutApiDnsZonesZoneIdJSONRequestBody defines body for PutApiDnsZonesZoneId for application/json ContentType.
type PutApiDnsZonesZoneIdJSONRequestBody = ZoneRequest

// PostApiDnsZonesZoneIdRecordsJSONRequestBody defines body for PostApiDnsZonesZoneIdRecords for application/json ContentType.
type PostApiDnsZonesZoneIdRecordsJSONRequestBody = DNSRecordRequest

// PutApiDnsZonesZoneIdRecordsRecordIdJSONRequestBody defines body for PutApiDnsZonesZoneIdRecordsRecordId for application/json ContentType.
type PutApiDnsZonesZoneIdRecordsRecordIdJSONRequestBody = DNSRecordRequest

// CreateIntegrationJSONRequestBody defines body for CreateIntegration for application/json ContentType.
type CreateIntegrationJSONRequestBody = CreateIntegrationRequest

// UpdateIntegrationJSONRequestBody defines body for UpdateIntegration for application/json ContentType.
type UpdateIntegrationJSONRequestBody = CreateIntegrationRequest

// PostApiGroupsJSONRequestBody defines body for PostApiGroups for application/json ContentType.
type PostApiGroupsJSONRequestBody = GroupRequest

// PutApiGroupsGroupIdJSONRequestBody defines body for PutApiGroupsGroupId for application/json ContentType.
type PutApiGroupsGroupIdJSONRequestBody = GroupRequest

// PostApiIdentityProvidersJSONRequestBody defines body for PostApiIdentityProviders for application/json ContentType.
type PostApiIdentityProvidersJSONRequestBody = IdentityProviderRequest

// PutApiIdentityProvidersIdpIdJSONRequestBody defines body for PutApiIdentityProvidersIdpId for application/json ContentType.
type PutApiIdentityProvidersIdpIdJSONRequestBody = IdentityProviderRequest

// PostApiIngressPeersJSONRequestBody defines body for PostApiIngressPeers for application/json ContentType.
type PostApiIngressPeersJSONRequestBody = IngressPeerCreateRequest

// PutApiIngressPeersIngressPeerIdJSONRequestBody defines body for PutApiIngressPeersIngressPeerId for application/json ContentType.
type PutApiIngressPeersIngressPeerIdJSONRequestBody = IngressPeerUpdateRequest

// CreateAzureIntegrationJSONRequestBody defines body for CreateAzureIntegration for application/json ContentType.
type CreateAzureIntegrationJSONRequestBody = CreateAzureIntegrationRequest

// UpdateAzureIntegrationJSONRequestBody defines body for UpdateAzureIntegration for application/json ContentType.
type UpdateAzureIntegrationJSONRequestBody = UpdateAzureIntegrationRequest

// PostApiIntegrationsBillingAwsMarketplaceActivateJSONRequestBody defines body for PostApiIntegrationsBillingAwsMarketplaceActivate for application/json ContentType.
type PostApiIntegrationsBillingAwsMarketplaceActivateJSONRequestBody PostApiIntegrationsBillingAwsMarketplaceActivateJSONBody

// PostApiIntegrationsBillingAwsMarketplaceEnrichJSONRequestBody defines body for PostApiIntegrationsBillingAwsMarketplaceEnrich for application/json ContentType.
type PostApiIntegrationsBillingAwsMarketplaceEnrichJSONRequestBody PostApiIntegrationsBillingAwsMarketplaceEnrichJSONBody

// PostApiIntegrationsBillingCheckoutJSONRequestBody defines body for PostApiIntegrationsBillingCheckout for application/json ContentType.
type PostApiIntegrationsBillingCheckoutJSONRequestBody PostApiIntegrationsBillingCheckoutJSONBody

// PutApiIntegrationsBillingSubscriptionJSONRequestBody defines body for PutApiIntegrationsBillingSubscription for application/json ContentType.
type PutApiIntegrationsBillingSubscriptionJSONRequestBody PutApiIntegrationsBillingSubscriptionJSONBody

// CreateFalconEDRIntegrationJSONRequestBody defines body for CreateFalconEDRIntegration for application/json ContentType.
type CreateFalconEDRIntegrationJSONRequestBody = EDRFalconRequest

// UpdateFalconEDRIntegrationJSONRequestBody defines body for UpdateFalconEDRIntegration for application/json ContentType.
type UpdateFalconEDRIntegrationJSONRequestBody = EDRFalconRequest

// CreateFleetDMEDRIntegrationJSONRequestBody defines body for CreateFleetDMEDRIntegration for application/json ContentType.
type CreateFleetDMEDRIntegrationJSONRequestBody = EDRFleetDMRequest

// UpdateFleetDMEDRIntegrationJSONRequestBody defines body for UpdateFleetDMEDRIntegration for application/json ContentType.
type UpdateFleetDMEDRIntegrationJSONRequestBody = EDRFleetDMRequest

// CreateHuntressEDRIntegrationJSONRequestBody defines body for CreateHuntressEDRIntegration for application/json ContentType.
type CreateHuntressEDRIntegrationJSONRequestBody = EDRHuntressRequest

// UpdateHuntressEDRIntegrationJSONRequestBody defines body for UpdateHuntressEDRIntegration for application/json ContentType.
type UpdateHuntressEDRIntegrationJSONRequestBody = EDRHuntressRequest

// CreateEDRIntegrationJSONRequestBody defines body for CreateEDRIntegration for application/json ContentType.
type CreateEDRIntegrationJSONRequestBody = EDRIntuneRequest

// UpdateEDRIntegrationJSONRequestBody defines body for UpdateEDRIntegration for application/json ContentType.
type UpdateEDRIntegrationJSONRequestBody = EDRIntuneRequest

// CreateSentinelOneEDRIntegrationJSONRequestBody defines body for CreateSentinelOneEDRIntegration for application/json ContentType.
type CreateSentinelOneEDRIntegrationJSONRequestBody = EDRSentinelOneRequest

// UpdateSentinelOneEDRIntegrationJSONRequestBody defines body for UpdateSentinelOneEDRIntegration for application/json ContentType.
type UpdateSentinelOneEDRIntegrationJSONRequestBody = EDRSentinelOneRequest

// CreateGoogleIntegrationJSONRequestBody defines body for CreateGoogleIntegration for application/json ContentType.
type CreateGoogleIntegrationJSONRequestBody = CreateGoogleIntegrationRequest

// UpdateGoogleIntegrationJSONRequestBody defines body for UpdateGoogleIntegration for application/json ContentType.
type UpdateGoogleIntegrationJSONRequestBody = UpdateGoogleIntegrationRequest

// PostApiIntegrationsMspTenantsJSONRequestBody defines body for PostApiIntegrationsMspTenants for application/json ContentType.
type PostApiIntegrationsMspTenantsJSONRequestBody = CreateTenantRequest

// PutApiIntegrationsMspTenantsIdJSONRequestBody defines body for PutApiIntegrationsMspTenantsId for application/json ContentType.
type PutApiIntegrationsMspTenantsIdJSONRequestBody = UpdateTenantRequest

// PutApiIntegrationsMspTenantsIdInviteJSONRequestBody defines body for PutApiIntegrationsMspTenantsIdInvite for application/json ContentType.
type PutApiIntegrationsMspTenantsIdInviteJSONRequestBody PutApiIntegrationsMspTenantsIdInviteJSONBody

// PostApiIntegrationsMspTenantsIdSubscriptionJSONRequestBody defines body for PostApiIntegrationsMspTenantsIdSubscription for application/json ContentType.
type PostApiIntegrationsMspTenantsIdSubscriptionJSONRequestBody PostApiIntegrationsMspTenantsIdSubscriptionJSONBody

// PostApiIntegrationsMspTenantsIdUnlinkJSONRequestBody defines body for PostApiIntegrationsMspTenantsIdUnlink for application/json ContentType.
type PostApiIntegrationsMspTenantsIdUnlinkJSONRequestBody PostApiIntegrationsMspTenantsIdUnlinkJSONBody

// CreateNotificationChannelJSONRequestBody defines body for CreateNotificationChannel for application/json ContentType.
type CreateNotificationChannelJSONRequestBody = NotificationChannelRequest

// UpdateNotificationChannelJSONRequestBody defines body for UpdateNotificationChannel for application/json ContentType.
type UpdateNotificationChannelJSONRequestBody = NotificationChannelRequest

// CreateOktaScimIntegrationJSONRequestBody defines body for CreateOktaScimIntegration for application/json ContentType.
type CreateOktaScimIntegrationJSONRequestBody = CreateOktaScimIntegrationRequest

// UpdateOktaScimIntegrationJSONRequestBody defines body for UpdateOktaScimIntegration for application/json ContentType.
type UpdateOktaScimIntegrationJSONRequestBody = UpdateOktaScimIntegrationRequest

// CreateSCIMIntegrationJSONRequestBody defines body for CreateSCIMIntegration for application/json ContentType.
type CreateSCIMIntegrationJSONRequestBody = CreateScimIntegrationRequest

// UpdateSCIMIntegrationJSONRequestBody defines body for UpdateSCIMIntegration for application/json ContentType.
type UpdateSCIMIntegrationJSONRequestBody = UpdateScimIntegrationRequest

// PostApiNetworksJSONRequestBody defines body for PostApiNetworks for application/json ContentType.
type PostApiNetworksJSONRequestBody = NetworkRequest

// PutApiNetworksNetworkIdJSONRequestBody defines body for PutApiNetworksNetworkId for application/json ContentType.
type PutApiNetworksNetworkIdJSONRequestBody = NetworkRequest

// PostApiNetworksNetworkIdResourcesJSONRequestBody defines body for PostApiNetworksNetworkIdResources for application/json ContentType.
type PostApiNetworksNetworkIdResourcesJSONRequestBody = NetworkResourceRequest

// PutApiNetworksNetworkIdResourcesResourceIdJSONRequestBody defines body for PutApiNetworksNetworkIdResourcesResourceId for application/json ContentType.
type PutApiNetworksNetworkIdResourcesResourceIdJSONRequestBody = NetworkResourceRequest

// PostApiNetworksNetworkIdRoutersJSONRequestBody defines body for PostApiNetworksNetworkIdRouters for application/json ContentType.
type PostApiNetworksNetworkIdRoutersJSONRequestBody = NetworkRouterRequest

// PutApiNetworksNetworkIdRoutersRouterIdJSONRequestBody defines body for PutApiNetworksNetworkIdRoutersRouterId for application/json ContentType.
type PutApiNetworksNetworkIdRoutersRouterIdJSONRequestBody = NetworkRouterRequest

// PutApiPeersPeerIdJSONRequestBody defines body for PutApiPeersPeerId for application/json ContentType.
type PutApiPeersPeerIdJSONRequestBody = PeerRequest

// PostApiPeersPeerIdIngressPortsJSONRequestBody defines body for PostApiPeersPeerIdIngressPorts for application/json ContentType.
type PostApiPeersPeerIdIngressPortsJSONRequestBody = IngressPortAllocationRequest

// PutApiPeersPeerIdIngressPortsAllocationIdJSONRequestBody defines body for PutApiPeersPeerIdIngressPortsAllocationId for application/json ContentType.
type PutApiPeersPeerIdIngressPortsAllocationIdJSONRequestBody = IngressPortAllocationRequest

// PostApiPeersPeerIdJobsJSONRequestBody defines body for PostApiPeersPeerIdJobs for application/json ContentType.
type PostApiPeersPeerIdJobsJSONRequestBody = JobRequest

// PostApiPeersPeerIdTemporaryAccessJSONRequestBody defines body for PostApiPeersPeerIdTemporaryAccess for application/json ContentType.
type PostApiPeersPeerIdTemporaryAccessJSONRequestBody = PeerTemporaryAccessRequest

// PostApiPoliciesJSONRequestBody defines body for PostApiPolicies for application/json ContentType.
type PostApiPoliciesJSONRequestBody = PolicyUpdate

// PutApiPoliciesPolicyIdJSONRequestBody defines body for PutApiPoliciesPolicyId for application/json ContentType.
type PutApiPoliciesPolicyIdJSONRequestBody = PolicyCreate

// PostApiPostureChecksJSONRequestBody defines body for PostApiPostureChecks for application/json ContentType.
type PostApiPostureChecksJSONRequestBody = PostureCheckUpdate

// PutApiPostureChecksPostureCheckIdJSONRequestBody defines body for PutApiPostureChecksPostureCheckId for application/json ContentType.
type PutApiPostureChecksPostureCheckIdJSONRequestBody = PostureCheckUpdate

// PostApiReverseProxiesDomainsJSONRequestBody defines body for PostApiReverseProxiesDomains for application/json ContentType.
type PostApiReverseProxiesDomainsJSONRequestBody = ReverseProxyDomainRequest

// PostApiReverseProxiesProxyTokensJSONRequestBody defines body for PostApiReverseProxiesProxyTokens for application/json ContentType.
type PostApiReverseProxiesProxyTokensJSONRequestBody = ProxyTokenRequest

// PostApiReverseProxiesServicesJSONRequestBody defines body for PostApiReverseProxiesServices for application/json ContentType.
type PostApiReverseProxiesServicesJSONRequestBody = ServiceRequest

// PutApiReverseProxiesServicesServiceIdJSONRequestBody defines body for PutApiReverseProxiesServicesServiceId for application/json ContentType.
type PutApiReverseProxiesServicesServiceIdJSONRequestBody = ServiceRequest

// PostApiRoutesJSONRequestBody defines body for PostApiRoutes for application/json ContentType.
type PostApiRoutesJSONRequestBody = RouteRequest

// PutApiRoutesRouteIdJSONRequestBody defines body for PutApiRoutesRouteId for application/json ContentType.
type PutApiRoutesRouteIdJSONRequestBody = RouteRequest

// PostApiSetupJSONRequestBody defines body for PostApiSetup for application/json ContentType.
type PostApiSetupJSONRequestBody = SetupRequest

// PostApiSetupKeysJSONRequestBody defines body for PostApiSetupKeys for application/json ContentType.
type PostApiSetupKeysJSONRequestBody = CreateSetupKeyRequest

// PutApiSetupKeysKeyIdJSONRequestBody defines body for PutApiSetupKeysKeyId for application/json ContentType.
type PutApiSetupKeysKeyIdJSONRequestBody = SetupKeyRequest

// PostApiUsersJSONRequestBody defines body for PostApiUsers for application/json ContentType.
type PostApiUsersJSONRequestBody = UserCreateRequest

// PostApiUsersInvitesJSONRequestBody defines body for PostApiUsersInvites for application/json ContentType.
type PostApiUsersInvitesJSONRequestBody = UserInviteCreateRequest

// PostApiUsersInvitesInviteIdRegenerateJSONRequestBody defines body for PostApiUsersInvitesInviteIdRegenerate for application/json ContentType.
type PostApiUsersInvitesInviteIdRegenerateJSONRequestBody = UserInviteRegenerateRequest

// PostApiUsersInvitesTokenAcceptJSONRequestBody defines body for PostApiUsersInvitesTokenAccept for application/json ContentType.
type PostApiUsersInvitesTokenAcceptJSONRequestBody = UserInviteAcceptRequest

// PutApiUsersUserIdJSONRequestBody defines body for PutApiUsersUserId for application/json ContentType.
type PutApiUsersUserIdJSONRequestBody = UserRequest

// PutApiUsersUserIdPasswordJSONRequestBody defines body for PutApiUsersUserIdPassword for application/json ContentType.
type PutApiUsersUserIdPasswordJSONRequestBody = PasswordChangeRequest

// PostApiUsersUserIdTokensJSONRequestBody defines body for PostApiUsersUserIdTokens for application/json ContentType.
type PostApiUsersUserIdTokensJSONRequestBody = PersonalAccessTokenRequest

// AsEmailTarget returns the union data inside the NotificationChannelRequest_Target as a EmailTarget
func (t NotificationChannelRequest_Target) AsEmailTarget() (EmailTarget, error) {
	var body EmailTarget
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromEmailTarget overwrites any union data inside the NotificationChannelRequest_Target as the provided EmailTarget
func (t *NotificationChannelRequest_Target) FromEmailTarget(v EmailTarget) error {
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergeEmailTarget performs a merge with any union data inside the NotificationChannelRequest_Target, using the provided EmailTarget
func (t *NotificationChannelRequest_Target) MergeEmailTarget(v EmailTarget) error {
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

// AsWebhookTarget returns the union data inside the NotificationChannelRequest_Target as a WebhookTarget
func (t NotificationChannelRequest_Target) AsWebhookTarget() (WebhookTarget, error) {
	var body WebhookTarget
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromWebhookTarget overwrites any union data inside the NotificationChannelRequest_Target as the provided WebhookTarget
func (t *NotificationChannelRequest_Target) FromWebhookTarget(v WebhookTarget) error {
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergeWebhookTarget performs a merge with any union data inside the NotificationChannelRequest_Target, using the provided WebhookTarget
func (t *NotificationChannelRequest_Target) MergeWebhookTarget(v WebhookTarget) error {
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

func (t NotificationChannelRequest_Target) MarshalJSON() ([]byte, error) {
	b, err := t.union.MarshalJSON()
	return b, err
}

func (t *NotificationChannelRequest_Target) UnmarshalJSON(b []byte) error {
	err := t.union.UnmarshalJSON(b)
	return err
}

// AsEmailTarget returns the union data inside the NotificationChannelResponse_Target as a EmailTarget
func (t NotificationChannelResponse_Target) AsEmailTarget() (EmailTarget, error) {
	var body EmailTarget
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromEmailTarget overwrites any union data inside the NotificationChannelResponse_Target as the provided EmailTarget
func (t *NotificationChannelResponse_Target) FromEmailTarget(v EmailTarget) error {
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergeEmailTarget performs a merge with any union data inside the NotificationChannelResponse_Target, using the provided EmailTarget
func (t *NotificationChannelResponse_Target) MergeEmailTarget(v EmailTarget) error {
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

// AsWebhookTarget returns the union data inside the NotificationChannelResponse_Target as a WebhookTarget
func (t NotificationChannelResponse_Target) AsWebhookTarget() (WebhookTarget, error) {
	var body WebhookTarget
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromWebhookTarget overwrites any union data inside the NotificationChannelResponse_Target as the provided WebhookTarget
func (t *NotificationChannelResponse_Target) FromWebhookTarget(v WebhookTarget) error {
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergeWebhookTarget performs a merge with any union data inside the NotificationChannelResponse_Target, using the provided WebhookTarget
func (t *NotificationChannelResponse_Target) MergeWebhookTarget(v WebhookTarget) error {
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

func (t NotificationChannelResponse_Target) MarshalJSON() ([]byte, error) {
	b, err := t.union.MarshalJSON()
	return b, err
}

func (t *NotificationChannelResponse_Target) UnmarshalJSON(b []byte) error {
	err := t.union.UnmarshalJSON(b)
	return err
}

// AsBundleWorkloadRequest returns the union data inside the WorkloadRequest as a BundleWorkloadRequest
func (t WorkloadRequest) AsBundleWorkloadRequest() (BundleWorkloadRequest, error) {
	var body BundleWorkloadRequest
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromBundleWorkloadRequest overwrites any union data inside the WorkloadRequest as the provided BundleWorkloadRequest
func (t *WorkloadRequest) FromBundleWorkloadRequest(v BundleWorkloadRequest) error {
	v.Type = "bundle"
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergeBundleWorkloadRequest performs a merge with any union data inside the WorkloadRequest, using the provided BundleWorkloadRequest
func (t *WorkloadRequest) MergeBundleWorkloadRequest(v BundleWorkloadRequest) error {
	v.Type = "bundle"
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

func (t WorkloadRequest) Discriminator() (string, error) {
	var discriminator struct {
		Discriminator string `json:"type"`
	}
	err := json.Unmarshal(t.union, &discriminator)
	return discriminator.Discriminator, err
}

func (t WorkloadRequest) ValueByDiscriminator() (interface{}, error) {
	discriminator, err := t.Discriminator()
	if err != nil {
		return nil, err
	}
	switch discriminator {
	case "bundle":
		return t.AsBundleWorkloadRequest()
	default:
		return nil, errors.New("unknown discriminator value: " + discriminator)
	}
}

func (t WorkloadRequest) MarshalJSON() ([]byte, error) {
	b, err := t.union.MarshalJSON()
	return b, err
}

func (t *WorkloadRequest) UnmarshalJSON(b []byte) error {
	err := t.union.UnmarshalJSON(b)
	return err
}

// AsBundleWorkloadResponse returns the union data inside the WorkloadResponse as a BundleWorkloadResponse
func (t WorkloadResponse) AsBundleWorkloadResponse() (BundleWorkloadResponse, error) {
	var body BundleWorkloadResponse
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromBundleWorkloadResponse overwrites any union data inside the WorkloadResponse as the provided BundleWorkloadResponse
func (t *WorkloadResponse) FromBundleWorkloadResponse(v BundleWorkloadResponse) error {
	v.Type = "bundle"
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergeBundleWorkloadResponse performs a merge with any union data inside the WorkloadResponse, using the provided BundleWorkloadResponse
func (t *WorkloadResponse) MergeBundleWorkloadResponse(v BundleWorkloadResponse) error {
	v.Type = "bundle"
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

func (t WorkloadResponse) Discriminator() (string, error) {
	var discriminator struct {
		Discriminator string `json:"type"`
	}
	err := json.Unmarshal(t.union, &discriminator)
	return discriminator.Discriminator, err
}

func (t WorkloadResponse) ValueByDiscriminator() (interface{}, error) {
	discriminator, err := t.Discriminator()
	if err != nil {
		return nil, err
	}
	switch discriminator {
	case "bundle":
		return t.AsBundleWorkloadResponse()
	default:
		return nil, errors.New("unknown discriminator value: " + discriminator)
	}
}

func (t WorkloadResponse) MarshalJSON() ([]byte, error) {
	b, err := t.union.MarshalJSON()
	return b, err
}

func (t *WorkloadResponse) UnmarshalJSON(b []byte) error {
	err := t.union.UnmarshalJSON(b)
	return err
}
