openapi: 3.0.3 info: version: 1.0.0 description: |

This API enables automated administration of Defined Networking hosts, roles, logs, and more. To authenticate, obtain an api key to use as a bearer token from your Defined Networking admin panel [API Keys page](https://admin.defined.net/settings/api-keys). API keys must be given the appropriate permission scopes for every method and endpoint, as specified throughout this documentation. Please [contact us](https://www.defined.net/contact?reason=support) for any questions or issues. In the event of a token leak, please take care to [rotate the key](/guides/rotating-api-keys).
title: Defined Networking API termsOfService: http://defined.net/terms/ contact: url: https://www.defined.net/contact?reason=support x-logo: url: https://docs.defined.net/img/logo.svg altText: Defined Networking logo x-dark-logo: url: https://docs.defined.net/img/logo-dark.svg altText: Defined Networking logo servers: - url: https://api.defined.net description: Default server security: - ApiToken: [] tags: - name: hosts x-displayName: Hosts description: Operations requiring `hosts:` permission scopes - name: roles x-displayName: Roles description: Operations requiring `roles:` permission scopes - name: auditLogs x-displayName: Audit Logs description: Operations requiring `audit-logs:` permission scopes - name: networks x-displayName: Networks description: Operations requiring `networks:` permission scopes - name: downloads x-displayName: Downloads description: Information about software downloads externalDocs: description: Find more about the API here url: https://docs.defined.net/guides/automating-host-creation/ paths: /v1/hosts: post: summary: Create host description: | Create a new host, lighthouse, or relay. Token scope required: `hosts:create` ### Request operationId: hostCreate tags: - hosts requestBody: required: true content: application/json: schema: type: object required: - name - networkID properties: name: description: Name of the new host type: string minLength: 1 maxLength: 255 example: My new host networkID: description: ID of your network type: string example: network-KAOWMXZHZWCVMGGFKM22XEGYLE roleID: description: ID of the role you want to assign type: string nullable: true example: role-PZEDBXHQEXKACJPZ6XOQTIAJA4 ipAddress: description: Assign an IP address to be used within the Managed Nebula network. Must be within the network's CIDR range. Will be chosen automatically if not provided. type: string format: ipv4 example: 100.100.0.29 staticAddresses: description: List of static IPv4:port addresses. At least one is required if `isLighthouse` is `true`. type: array items: type: string format: ipv4:port example: - 84.123.10.1:4242 default: [] listenPort: description: The UDP port nebula should use on the host. An available port will be automatically selected if `0` is specified. Required for lighthouses and relays. format: integer minimum: 0 maximum: 65535 default: 0 isLighthouse: description: Set to true to create a new lighthouse. A Lighthouse cannot also be relay. format: boolean isRelay: description: Set to true to create a new relay. A relay cannot also be a lighthouse. format: boolean responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Host' metadata: type: object example: data: createdAt: '2023-01-25T18:15:27Z' id: host-24NVITKMNU3CYCEDNFWKAOBX7I ipAddress: 100.100.0.29 isBlocked: false isLighthouse: false isRelay: false listenPort: 0 name: My new host networkID: network-KAOWMXZHZWCVMGGFKM22XEGYLE organizationID: org-F63A24JGCLJV3ZEUTLCBISGETA roleID: role-PZEDBXHQEXKACJPZ6XOQTIAJA4 staticAddresses: - 84.123.10.1:4242 metadata: lastSeenAt: '2023-01-25T18:15:27Z' platform: dnclient updateAvailable: false version: 0.1.9 metadata: {} '400': description: Validation error content: application/json: schema: type: object properties: errors: $ref: '#/components/schemas/Errors' examples: existingHostName: summary: A host already exists with the name. value: errors: - code: ERR_DUPLICATE_VALUE message: value already exists path: name cannotFindNetwork: summary: Cannot find the supplied networkID. value: errors: - code: ERR_INVALID_REFERENCE message: referenced value is invalid (perhaps it does not exist?) path: networkID duplicateIpAddress: summary: A host with the ipAddress supplied already exists. value: errors: - code: ERR_DUPLICATE_VALUE message: value already exists path: ipAddress cannotFindRole: summary: Cannot find the supplied roleID. value: errors: - code: ERR_INVALID_REFERENCE message: referenced value is invalid (perhaps it does not exist?) path: roleID lighthouseXorRelay: summary: A host may be a lighthouse OR a relay, but not both. value: errors: - code: ERR_INVALID_VALUE message: lighthouse hosts must not also be relay hosts lighthouseNeedsStaticIP: summary: A lighthouse requires at least one static IP address. value: errors: - code: ERR_INVALID_VALUE message: lighthouse hosts must have at least one static ip address path: staticAddresses lighthouseNeedsStaticPort: summary: A lighthouse requires a static listen port, like `4242`. value: errors: - code: ERR_INVALID_VALUE message: lighthouse hosts must specify a static listen port path: listenPort relayNeedsStaticPort: summary: A relay requires a static listen port, like `4242`. value: errors: - code: ERR_INVALID_VALUE message: relay hosts must specify a static listen port path: listenPort get: summary: List hosts description: | Get a paginated list of hosts, lighthouses, and relays. Token scope required: `hosts:list` ### Request operationId: hostsList tags: - hosts parameters: - $ref: '#/components/parameters/includeCounts' - $ref: '#/components/parameters/cursor' - $ref: '#/components/parameters/pageSize' - $ref: '#/components/parameters/filter-isBlocked' - $ref: '#/components/parameters/filter-isLighthouse' - $ref: '#/components/parameters/filter-isRelay' - $ref: '#/components/parameters/filter-metadata-lastSeenAt' - $ref: '#/components/parameters/filter-metadata-platform' - $ref: '#/components/parameters/filter-metadata-updateAvailable' responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Host' metadata: $ref: '#/components/schemas/PaginationMetadata' examples: noParams: summary: When includeCounts parameter is not set to true value: data: - createdAt: '2023-01-25T18:15:27Z' id: host-24NVITKMNU3CYCEDNFWKAOBX7I ipAddress: 100.100.0.29 isBlocked: false isLighthouse: false isRelay: false listenPort: 0 name: Host 1 networkID: network-KAOWMXZHZWCVMGGFKM22XEGYLE organizationID: org-F63A24JGCLJV3ZEUTLCBISGETA roleID: role-PZEDBXHCEXKAKJPZ6XOQTIAJA4 staticAddresses: [] metadata: lastSeenAt: '2023-04-05T17:19:42Z' platform: dnclient updateAvailable: false version: 0.1.9 metadata: hasNextPage: true hasPrevPage: true nextCursor: bmV4dA.bHVlIjoieGJVS0UvYkRjQmZsY1pUbGJCc prevCursor: cHJldg.SI6ImIiLCJfdmFsdWUiOiI0dDVuREQreU includeCounts: summary: Metadata returned when including request params for includeCounts=true, pageSize=1, and cursor="somevalue". value: data: - createdAt: '2023-01-25T18:15:27Z' id: host-24NVITKMNU3CYCEDNFWKAOBX7I ipAddress: 100.100.0.29 isBlocked: false isLighthouse: false isRelay: false listenPort: 0 name: Host 1 networkID: network-KAOWMXZHZWCVMGGFKM22XEGYLE organizationID: org-F63A24JGCLJV3ZEUTLCBISGETA roleID: role-PZEDBXHCEXKAKJPZ6XOQTIAJA4 staticAddresses: [] metadata: lastSeenAt: '2023-04-05T17:19:42Z' platform: mobile updateAvailable: true version: 0.1.9 metadata: totalCount: 500 hasNextPage: true hasPrevPage: true prevCursor: cHJldg.SI6ImIiLCJfdmFsdWUiOiI0dDVuREQreU nextCursor: bmV4dA.bHVlIjoieGJVS0UvYkRjQmZsY1pUbGJCc page: count: 1 start: 5 /v1/hosts/{hostID}: get: summary: Get host description: | Fetch information about a particular host, lighthouse, or relay. Token scope required: `hosts:read` ### Request operationId: hostGet tags: - hosts parameters: - name: hostID in: path required: true schema: type: string example: host-24NVITKMNU3CYCEDNFWKAOBX7I responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Host' metadata: type: object examples: Example: value: data: createdAt: '2023-01-25T18:15:27Z' id: host-24NVITKMNU3CYCEDNFWKAOBX7I ipAddress: 100.100.0.29 isBlocked: false isLighthouse: false isRelay: false listenPort: 0 name: Host 1 networkID: network-KAOWMXZHZWCVMGGFKM22XEGYLE organizationID: org-F63A24JGCLJV3ZEUTLCBISGETA roleID: role-PZEDBXHCEXKAKJPZ6XOQTIAJA4 staticAddresses: [] metadata: lastSeenAt: '2023-04-05T17:19:42Z' platform: dnclient updateAvailable: false version: 0.1.9 metadata: {} noMetadata: summary: If the host has not been enrolled, its metadata will be unknown (null values). value: data: createdAt: '2023-01-25T18:15:27Z' id: host-24NVITKMNU3CYCEDNFWKAOBX7I ipAddress: 100.100.0.29 isBlocked: false isLighthouse: false isRelay: false listenPort: 0 name: Host 1 networkID: network-KAOWMXZHZWCVMGGFKM22XEGYLE organizationID: org-F63A24JGCLJV3ZEUTLCBISGETA roleID: role-PZEDBXHCEXKAKJPZ6XOQTIAJA4 staticAddresses: [] metadata: lastSeenAt: null platform: null updateAvailable: null version: null metadata: {} put: summary: Edit host description: | Token scope required: `hosts:update` :::caution Any properties not provided in the request will be reset to their default values. ::: ### Request operationId: hostEdit tags: - hosts parameters: - name: hostID in: path required: true schema: type: string example: host-24NVITKMNU3CYCEDNFWKAOBX7I requestBody: required: true content: application/json: schema: type: object properties: staticAddresses: description: List of static IPv4:port addresses. At least one is required if `isLighthouse` is `true`. type: string format: ipv4:port example: - 84.123.10.1:4242 default: [] listenPort: description: The UDP port nebula should use on the host. An available port will be automatically selected if `0` is specified. Required for lighthouses and relays. format: integer minimum: 0 maximum: 65535 default: 0 responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Host' metadata: type: object example: data: createdAt: '2023-01-25T18:15:27Z' id: host-24NVITKMNU3CYCEDNFWKAOBX7I ipAddress: 100.100.0.29 isBlocked: false isLighthouse: false isRelay: false listenPort: 0 name: Host 1 networkID: network-KAOWMXZHZWCVMGGFKM22XEGYLE organizationID: org-F63A24JGCLJV3ZEUTLCBISGETA roleID: role-PZEDBXHCEXKAKJPZ6XOQTIAJA4 staticAddresses: [] metadata: lastSeenAt: '2023-04-05T17:19:42Z' platform: dnclient updateAvailable: false version: 0.1.9 metadata: {} delete: summary: Delete host description: | Token scope required: `hosts:delete` ### Request operationId: hostDelete tags: - hosts parameters: - name: hostID in: path required: true schema: type: string example: host-24NVITKMNU3CYCEDNFWKAOBX7I responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: type: object metadata: type: object /v1/hosts/{hostID}/block: post: summary: Block host description: | Prevent a host from being able to interact with other nodes on your network. See https://www.defined.net/blog/blocklisting/ for more details. To unblock, re-enroll the host. Token scope required: `hosts:block` ### Request operationId: hostBlock tags: - hosts parameters: - name: hostID in: path required: true schema: type: string example: host-24NVITKMNU3CYCEDNFWKAOBX7I responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: type: object properties: host: $ref: '#/components/schemas/Host' metadata: type: object example: data: host: createdAt: '2023-01-25T18:15:27Z' id: host-24NVITKMNU3CYCEDNFWKAOBX7I ipAddress: 100.100.0.29 isBlocked: true isLighthouse: false isRelay: false listenPort: 0 name: Host 1 networkID: network-KAOWMXZHZWCVMGGFKM22XEGYLE organizationID: org-F63A24JGCLJV3ZEUTLCBISGETA roleID: role-PZEDBXHCEXKAKJPZ6XOQTIAJA4 staticAddresses: [] metadata: lastSeenAt: '2023-04-05T17:19:42Z' platform: dnclient updateAvailable: false version: 0.1.9 metadata: {} /v1/hosts/{hostID}/enrollment-code: post: summary: Create enrollment code description: | Obtain a code that can be used with the `dnclient enroll` command on a host, lighthouse, or relay to enroll it into your Managed Nebula network. Token scope required: `hosts:enroll` ### Request operationId: hostEnrollCodeCreate tags: - hosts parameters: - name: hostID in: path required: true schema: type: string example: host-24NVITKMNU3CYCEDNFWKAOBX7I responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: type: object properties: enrollmentCode: type: object properties: code: type: string description: Secret code to be used in `dnclient enroll` to allow the host/lighthouse/relay to join your Managed Nebula network. lifetimeSeconds: type: integer format: int64 description: The number of seconds the code is valid after being issued. metadata: type: object example: data: code: H8NEbm99QvupjqW1PsdVR9DNSiFmoQtJXyGTQxerlSU lifetimeSeconds: 86400 metadata: {} /v1/host-and-enrollment-code: post: summary: Create host & enrollment code description: | Token scopes required: `hosts:create`, `hosts:enroll` ### Request operationId: hostAndEnrollCodeCreate tags: - hosts requestBody: required: true content: application/json: schema: type: object required: - name - networkID properties: name: description: Name of the new host type: string minLength: 1 maxLength: 255 example: My new host networkID: description: ID of your network type: string example: network-KAOWMXZHZWCVMGGFKM22XEGYLE roleID: description: ID of the role you want to assign type: string nullable: true example: role-PZEDBXHQEXKACJPZ6XOQTIAJA4 ipAddress: description: Assign an IP address to be used within the Managed Nebula network. Must be within the network's CIDR range. Will be chosen automatically if not provided. type: string format: ipv4 example: 100.100.0.29 staticAddresses: description: List of static IPv4:port addresses. At least one is required if `isLighthouse` is `true`. type: array items: type: string format: ipv4:port example: - 84.123.10.1:4242 default: [] listenPort: description: The UDP port nebula should use on the host. An available port will be automatically selected if `0` is specified. Required for lighthouses and relays. format: integer minimum: 0 maximum: 65535 default: 0 isLighthouse: description: Set to true to create a new lighthouse. A Lighthouse cannot also be relay. format: boolean isRelay: description: Set to true to create a new relay. A relay cannot also be a lighthouse. format: boolean responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: type: object required: - host properties: host: $ref: '#/components/schemas/Host' enrollmentCode: type: object properties: code: type: string lifetimeSeconds: type: integer format: int64 metadata: type: object example: data: host: createdAt: '2023-01-25T18:15:27Z' id: host-24NVITKMNU3CYCEDNFWKAOBX7I ipAddress: 100.100.0.29 isBlocked: false isLighthouse: false isRelay: false listenPort: 0 name: Host 1 networkID: network-KAOWMXZHZWCVMGGFKM22XEGYLE organizationID: org-F63A24JGCLJV3ZEUTLCBISGETA roleID: role-PZEDBXHCEXKAKJPZ6XOQTIAJA4 staticAddresses: [] metadata: lastSeenAt: '2023-04-05T17:19:42Z' platform: dnclient updateAvailable: false version: 0.1.9 enrollmentCode: code: H8NEbm99QvupjqW1PsdVR9DNSiFmoQtJXyGTQxerlSU lifetimeSeconds: 86400 metadata: {} '400': description: Validation error content: application/json: schema: type: object required: - errors properties: errors: $ref: '#/components/schemas/Errors' examples: existingHostName: summary: A host already exists with the name. value: errors: - code: ERR_DUPLICATE_VALUE message: value already exists path: name cannotFindNetwork: summary: Cannot find the supplied networkID. value: errors: - code: ERR_INVALID_REFERENCE message: referenced value is invalid (perhaps it does not exist?) path: networkID duplicateIpAddress: summary: A host with the ipAddress supplied already exists. value: errors: - code: ERR_DUPLICATE_VALUE message: value already exists path: ipAddress cannotFindRole: summary: Cannot find the supplied roleID. value: errors: - code: ERR_INVALID_REFERENCE message: referenced value is invalid (perhaps it does not exist?) path: roleID lighthouseXorRelay: summary: A host may be a lighthouse OR a relay, but not both. value: errors: - code: ERR_INVALID_VALUE message: lighthouse hosts must not also be relay hosts lighthouseNeedsStaticIP: summary: A lighthouse requires at least one static IP address. value: errors: - code: ERR_INVALID_VALUE message: lighthouse hosts must have at least one static ip address path: staticAddresses lighthouseNeedsStaticPort: summary: A lighthouse requires a static listen port, like `4242`. value: errors: - code: ERR_INVALID_VALUE message: lighthouse hosts must specify a static listen port path: listenPort relayNeedsStaticPort: summary: A relay requires a static listen port, like `4242`. value: errors: - code: ERR_INVALID_VALUE message: relay hosts must specify a static listen port path: listenPort /v1/roles: post: summary: Create role description: | Create a new role. Token scope required: `roles:create` ### Request operationId: roleCreate tags: - roles requestBody: required: true content: application/json: schema: type: object required: - name properties: name: description: Name of the new role type: string minLength: 1 maxLength: 50 example: My new role description: description: Optional description type: string maxLength: 255 firewallRules: description: Incoming firewall rules type: array items: $ref: '#/components/schemas/FirewallRule' responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Role' metadata: type: object example: data: id: role-LO4SPDSWTZNJC676WFCZKUB3ZQ name: My new role description: '' createdAt: '2023-02-15T13:59:09Z' modifiedAt: '2023-02-15T13:59:09Z' firewallRules: - protocol: TCP description: allow SSH access allowedRoleID: role-G3TWUQ4FASQEF44MGMTSRBTYKM portRange: from: 22 to: 22 metadata: {} '400': description: Validation error content: application/json: schema: type: object required: - errors properties: errors: $ref: '#/components/schemas/Errors' examples: missingName: summary: name not specified. value: errors: - code: ERR_INVALID_VALUE_LENGTH message: must have a length between 1 and 50 path: name duplicateName: summary: A role with the name already exists. value: errors: - code: ERR_DUPLICATE_VALUE message: value already exists path: name protocol: summary: Invalid protocol value. value: errors: - code: ERR_INVALID_VALUE message: 'must be a valid protocol: ANY, TCP, UDP, ICMP' path: firewallRules[0].protocol portRangeMissing: summary: Invalid/missing from and to values. value: errors: - code: ERR_INVALID_VALUE message: must be between 1 and 65535 path: firewallRules[0].portRange.from - code: ERR_INVALID_VALUE message: must be between 1 and 65535 path: firewallRules[0].portRange.to portRangeOrder: summary: From cannot be greater than to value: errors: - code: ERR_INVALID_VALUE message: from must be less than or equal to to path: firewallRules[0].portRange get: summary: List roles description: | Get a paginated list of roles. Token scope required: `roles:list` ### Request operationId: rolesList tags: - roles parameters: - $ref: '#/components/parameters/includeCounts' - $ref: '#/components/parameters/cursor' - $ref: '#/components/parameters/pageSize' responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Role' metadata: $ref: '#/components/schemas/PaginationMetadata' examples: noParams: summary: When includeCounts parameter is not set to true value: data: - id: role-LO4SPDSWTZNJC676WFCZKUB3ZQ name: My new role description: '' createdAt: '2023-02-15T13:59:09Z' modifiedAt: '2023-02-15T13:59:09Z' firewallRules: - protocol: TCP description: allow SSH access allowedRoleID: role-G3TWUQ4FASQEF44MGMTSRBTYKM portRange: from: 22 to: 22 metadata: hasNextPage: true hasPrevPage: true nextCursor: bmV4dA.bHVlIjoieGJVS0UvYkRjQmZsY1pUbGJCc prevCursor: cHJldg.SI6ImIiLCJfdmFsdWUiOiI0dDVuREQreU includeCounts: summary: Metadata returned when including request params for includeCounts=true, pageSize=1, and cursor="somevalue". value: data: - id: role-LO4SPDSWTZNJC676WFCZKUB3ZQ name: My new role description: '' createdAt: '2023-02-15T13:59:09Z' modifiedAt: '2023-02-15T13:59:09Z' firewallRules: - protocol: TCP description: allow SSH access allowedRoleID: role-G3TWUQ4FASQEF44MGMTSRBTYKM portRange: from: 22 to: 22 metadata: totalCount: 500 hasNextPage: true hasPrevPage: true prevCursor: cHJldg.SI6ImIiLCJfdmFsdWUiOiI0dDVuREQreU nextCursor: bmV4dA.bHVlIjoieGJVS0UvYkRjQmZsY1pUbGJCc page: count: 1 start: 5 /v1/roles/{roleID}: get: summary: Get role description: | Fetch information about a particular role. Token scope required: `roles:read` ### Request operationId: roleGet tags: - roles parameters: - name: roleID in: path required: true schema: type: string example: role-LO4SPDSWTZNJC676WFCZKUB3ZQ responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Role' metadata: type: object example: data: id: role-LO4SPDSWTZNJC676WFCZKUB3ZQ name: My new role description: '' createdAt: '2023-02-15T13:59:09Z' modifiedAt: '2023-02-15T13:59:09Z' firewallRules: - protocol: TCP description: allow SSH access allowedRoleID: role-G3TWUQ4FASQEF44MGMTSRBTYKM portRange: from: 22 to: 22 metadata: {} put: summary: Edit role description: | Token scope required: `roles:update` :::caution Any properties not provided in the request will be reset to their default values. If only changing one firewall rule, be sure to include the others as well, otherwise they will be removed. ::: ### Request operationId: roleEdit tags: - roles parameters: - name: roleID in: path required: true schema: type: string example: role-LO4SPDSWTZNJC676WFCZKUB3ZQ requestBody: required: true content: application/json: schema: type: object properties: description: type: string maxLength: 255 firewallRules: description: Incoming firewall rules. Will replace existing list of rules. type: array items: $ref: '#/components/schemas/FirewallRule' responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Role' metadata: type: object example: data: id: role-LO4SPDSWTZNJC676WFCZKUB3ZQ name: My new role description: '' createdAt: '2023-02-15T13:59:09Z' modifiedAt: '2023-02-15T13:59:09Z' firewallRules: - protocol: TCP description: allow SSH access allowedRoleID: role-G3TWUQ4FASQEF44MGMTSRBTYKM portRange: from: 22 to: 22 metadata: {} delete: summary: Delete role description: | Token scope required: `roles:delete` ### Request operationId: roleDelete tags: - roles parameters: - name: roleID in: path required: true schema: type: string example: role-LO4SPDSWTZNJC676WFCZKUB3ZQ responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: type: object metadata: type: object /v1/networks: get: summary: List networks description: | Get a paginated list of networks. :::note Currently, there is a limit of one network per Defined Networking account. ::: Token scope required: `networks:list` ### Request operationId: networksList tags: - networks parameters: - $ref: '#/components/parameters/includeCounts' - $ref: '#/components/parameters/cursor' - $ref: '#/components/parameters/pageSize' responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Network' metadata: $ref: '#/components/schemas/PaginationMetadata' examples: noParams: summary: When includeCounts parameter is not set to true value: data: - cidr: 100.100.0.0/22 id: network-ZJOW3QUQUX5ZAVPVYRHDQUAEIY organizationID: org-F63A24JGCLJV3ZEUTLCBISGETA signingCAID: ca-TRJSVAAAPJXTOICJMG2KZBKQEE name: Network1 lighthousesAsRelays: false createdAt: '2023-02-14T20:34:59Z' metadata: hasNextPage: true hasPrevPage: true nextCursor: bmV4dA.bHVlIjoieGJVS0UvYkRjQmZsY1pUbGJCc prevCursor: cHJldg.SI6ImIiLCJfdmFsdWUiOiI0dDVuREQreU includeCounts: summary: Metadata returned when including request params for includeCounts=true, pageSize=1, and cursor="somevalue". value: data: - cidr: 100.100.0.0/22 id: network-ZJOW3QUQUX5ZAVPVYRHDQUAEIY organizationID: org-F63A24JGCLJV3ZEUTLCBISGETA signingCAID: ca-TRJSVAAAPJXTOICJMG2KZBKQEE name: Network1 lighthousesAsRelays: false createdAt: '2023-02-14T20:34:59Z' metadata: totalCount: 500 hasNextPage: true hasPrevPage: true nextCursor: bmV4dA.bHVlIjoieGJVS0UvYkRjQmZsY1pUbGJCc prevCursor: cHJldg.SI6ImIiLCJfdmFsdWUiOiI0dDVuREQreU page: count: 1 start: 5 /v1/networks/{networkID}: get: summary: Get network description: | Fetch information about a particular network. Token scope required: `networks:read` ### Request operationId: networkGet tags: - networks parameters: - name: networkID in: path required: true schema: type: string example: network-ZJOW3QUQUX5ZAVPVYRHDQUAEIY responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Network' metadata: type: object example: data: cidr: 100.100.0.0/22 id: network-ZJOW3QUQUX5ZAVPVYRHDQUAEIY organizationID: org-F63A24JGCLJV3ZEUTLCBISGETA signingCAID: ca-TRJSVAAAPJXTOICJMG2KZBKQEE name: Network1 lighthousesAsRelays: false createdAt: '2023-02-14T20:34:59Z' metadata: {} /v1/audit-logs: get: summary: List audit logs description: | Get a paginated list of audit logs. Token scope required: `audit-logs:list` ### Request operationId: auditLogsList tags: - auditLogs parameters: - $ref: '#/components/parameters/includeCounts' - $ref: '#/components/parameters/cursor' - $ref: '#/components/parameters/pageSize' - $ref: '#/components/parameters/filter-targetID' - $ref: '#/components/parameters/filter-targetType' responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/AuditLog' metadata: $ref: '#/components/schemas/PaginationMetadata' examples: noParams: summary: When includeCounts parameter is not set to true value: data: - id: log-F3TTIDMKZH5XFH37RTRLIP3TOA organizationID: org-F63A24JGCLJV3ZEUTLCBISGETA timestamp: '2023-02-15T13:59:09.828868Z' actor: id: dnkey-DXALSPQONG7H45QZAVTPRDMAPU name: example api key type: apiKey target: id: role-LO4SPDSWTZNJC676WFCZKUB3ZQ type: role event: type: CREATED before: null after: name: My New Role description: '' firewallRules: null metadata: hasNextPage: true hasPrevPage: true nextCursor: bmV4dA.bHVlIjoieGJVS0UvYkRjQmZsY1pUbGJCc prevCursor: cHJldg.SI6ImIiLCJfdmFsdWUiOiI0dDVuREQreU includeCounts: summary: Metadata returned when including request params for includeCounts=true, pageSize=1, and cursor="somevalue". value: data: - id: log-F3TTIDMKZH5XFH37RTRLIP3TOA organizationID: org-F63A24JGCLJV3ZEUTLCBISGETA timestamp: '2023-02-15T13:59:09.828868Z' actor: id: dnkey-DXALSPQONG7H45QZAVTPRDMAPU name: example api key type: apiKey target: id: role-LO4SPDSWTZNJC676WFCZKUB3ZQ type: role event: type: CREATED before: null after: name: My New Role description: '' firewallRules: null metadata: totalCount: 500 hasNextPage: true hasPrevPage: true prevCursor: cHJldg.SI6ImIiLCJfdmFsdWUiOiI0dDVuREQreU nextCursor: bmV4dA.bHVlIjoieGJVS0UvYkRjQmZsY1pUbGJCc page: count: 1 start: 5 /v1/downloads: get: summary: List software downloads description: | Get a list of recently released software download links and basic info. This endpoint is unauthenticated. ### Request operationId: downloadsList tags: - downloads responses: '200': description: Successful operation content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Downloads' examples: Listing: summary: An example downloads listing value: data: dnclient: 0.1.5: linux-amd64: https://dl.defined.net/aa96f50d/v0.1.5/linux/amd64/dnclient linux-arm64: https://dl.defined.net/aa96f50d/v0.1.5/linux/arm64/dnclient linux-armv7: https://dl.defined.net/aa96f50d/v0.1.5/linux/arm-7/dnclient linux-mips-softfloat: https://dl.defined.net/aa96f50d/v0.1.5/linux/mips-softfloat/dnclient macos-universal: https://dl.defined.net/aa96f50d/v0.1.5/macos/dnclient macos-universal-dmg: https://dl.defined.net/aa96f50d/v0.1.5/macos/dnclient.dmg windows-amd64: https://dl.defined.net/aa96f50d/v0.1.5/windows/amd64/DNClient.msi windows-arm64: https://dl.defined.net/aa96f50d/v0.1.5/windows/arm64/DNClient.msi 0.1.6: linux-amd64: https://dl.defined.net/02c6d0f9/v0.1.6/linux/amd64/dnclient linux-arm64: https://dl.defined.net/02c6d0f9/v0.1.6/linux/arm64/dnclient linux-armv7: https://dl.defined.net/02c6d0f9/v0.1.6/linux/arm-7/dnclient linux-mips-softfloat: https://dl.defined.net/02c6d0f9/v0.1.6/linux/mips-softfloat/dnclient macos-universal: https://dl.defined.net/02c6d0f9/v0.1.6/macos/dnclient macos-universal-dmg: https://dl.defined.net/02c6d0f9/v0.1.6/macos/dnclient.dmg windows-amd64: https://dl.defined.net/02c6d0f9/v0.1.6/windows/amd64/DNClient.msi windows-arm64: https://dl.defined.net/02c6d0f9/v0.1.6/windows/arm64/DNClient.msi 0.1.7: linux-amd64: https://dl.defined.net/0ef94adc/v0.1.7/linux/amd64/dnclient linux-arm64: https://dl.defined.net/0ef94adc/v0.1.7/linux/arm64/dnclient linux-armv7: https://dl.defined.net/0ef94adc/v0.1.7/linux/arm-7/dnclient linux-mips-softfloat: https://dl.defined.net/0ef94adc/v0.1.7/linux/mips-softfloat/dnclient macos-universal: https://dl.defined.net/0ef94adc/v0.1.7/macos/dnclient macos-universal-dmg: https://dl.defined.net/0ef94adc/v0.1.7/macos/dnclient.dmg windows-amd64: https://dl.defined.net/0ef94adc/v0.1.7/windows/amd64/DNClient.msi windows-arm64: https://dl.defined.net/0ef94adc/v0.1.7/windows/arm64/DNClient.msi 0.1.8: freebsd-amd64: https://dl.defined.net/e16d2e9f/v0.1.8/freebsd/amd64/dnclient freebsd-arm64: https://dl.defined.net/e16d2e9f/v0.1.8/freebsd/arm64/dnclient linux-386: https://dl.defined.net/e16d2e9f/v0.1.8/linux/386/dnclient linux-amd64: https://dl.defined.net/e16d2e9f/v0.1.8/linux/amd64/dnclient linux-arm64: https://dl.defined.net/e16d2e9f/v0.1.8/linux/arm64/dnclient linux-armv5: https://dl.defined.net/e16d2e9f/v0.1.8/linux/arm-5/dnclient linux-armv6: https://dl.defined.net/e16d2e9f/v0.1.8/linux/arm-6/dnclient linux-armv7: https://dl.defined.net/e16d2e9f/v0.1.8/linux/arm-7/dnclient linux-mips: https://dl.defined.net/e16d2e9f/v0.1.8/linux/mips/dnclient linux-mips-softfloat: https://dl.defined.net/e16d2e9f/v0.1.8/linux/mips-softfloat/dnclient linux-mips64: https://dl.defined.net/e16d2e9f/v0.1.8/linux/mips64/dnclient linux-mips64le: https://dl.defined.net/e16d2e9f/v0.1.8/linux/mips64le/dnclient linux-mipsle: https://dl.defined.net/e16d2e9f/v0.1.8/linux/mipsle/dnclient linux-ppc64le: https://dl.defined.net/e16d2e9f/v0.1.8/linux/ppc64le/dnclient linux-riscv64: https://dl.defined.net/e16d2e9f/v0.1.8/linux/riscv64/dnclient macos-universal: https://dl.defined.net/e16d2e9f/v0.1.8/macos/dnclient macos-universal-dmg: https://dl.defined.net/e16d2e9f/v0.1.8/macos/dnclient.dmg windows-amd64: https://dl.defined.net/e16d2e9f/v0.1.8/windows/amd64/DNClient.msi windows-arm64: https://dl.defined.net/e16d2e9f/v0.1.8/windows/arm64/DNClient.msi 0.1.9: freebsd-amd64: https://dl.defined.net/02c6d0f9/v0.1.9/freebsd/amd64/dnclient, freebsd-arm64: https://dl.defined.net/02c6d0f9/v0.1.9/freebsd/arm64/dnclient, linux-386: https://dl.defined.net/02c6d0f9/v0.1.9/linux/386/dnclient, linux-amd64: https://dl.defined.net/02c6d0f9/v0.1.9/linux/amd64/dnclient, linux-arm64: https://dl.defined.net/02c6d0f9/v0.1.9/linux/arm64/dnclient, linux-armv5: https://dl.defined.net/02c6d0f9/v0.1.9/linux/arm-5/dnclient, linux-armv6: https://dl.defined.net/02c6d0f9/v0.1.9/linux/arm-6/dnclient, linux-armv7: https://dl.defined.net/02c6d0f9/v0.1.9/linux/arm-7/dnclient, linux-mips: https://dl.defined.net/02c6d0f9/v0.1.9/linux/mips/dnclient, linux-mips-softfloat: https://dl.defined.net/02c6d0f9/v0.1.9/linux/mips-softfloat/dnclient, linux-mips64: https://dl.defined.net/02c6d0f9/v0.1.9/linux/mips64/dnclient, linux-mips64le: https://dl.defined.net/02c6d0f9/v0.1.9/linux/mips64le/dnclient, linux-mipsle: https://dl.defined.net/02c6d0f9/v0.1.9/linux/mipsle/dnclient, linux-ppc64le: https://dl.defined.net/02c6d0f9/v0.1.9/linux/ppc64le/dnclient, linux-riscv64: https://dl.defined.net/02c6d0f9/v0.1.9/linux/riscv64/dnclient, macos-universal: https://dl.defined.net/02c6d0f9/v0.1.9/macos/dnclient, macos-universal-dmg: https://dl.defined.net/02c6d0f9/v0.1.9/macos/dnclient.dmg, windows-amd64: https://dl.defined.net/02c6d0f9/v0.1.9/windows/amd64/DNClient.msi, windows-arm64: https://dl.defined.net/02c6d0f9/v0.1.9/windows/arm64/DNClient.msi latest: freebsd-amd64: https://dl.defined.net/02c6d0f9/v0.1.9/freebsd/amd64/dnclient, freebsd-arm64: https://dl.defined.net/02c6d0f9/v0.1.9/freebsd/arm64/dnclient, linux-386: https://dl.defined.net/02c6d0f9/v0.1.9/linux/386/dnclient, linux-amd64: https://dl.defined.net/02c6d0f9/v0.1.9/linux/amd64/dnclient, linux-arm64: https://dl.defined.net/02c6d0f9/v0.1.9/linux/arm64/dnclient, linux-armv5: https://dl.defined.net/02c6d0f9/v0.1.9/linux/arm-5/dnclient, linux-armv6: https://dl.defined.net/02c6d0f9/v0.1.9/linux/arm-6/dnclient, linux-armv7: https://dl.defined.net/02c6d0f9/v0.1.9/linux/arm-7/dnclient, linux-mips: https://dl.defined.net/02c6d0f9/v0.1.9/linux/mips/dnclient, linux-mips-softfloat: https://dl.defined.net/02c6d0f9/v0.1.9/linux/mips-softfloat/dnclient, linux-mips64: https://dl.defined.net/02c6d0f9/v0.1.9/linux/mips64/dnclient, linux-mips64le: https://dl.defined.net/02c6d0f9/v0.1.9/linux/mips64le/dnclient, linux-mipsle: https://dl.defined.net/02c6d0f9/v0.1.9/linux/mipsle/dnclient, linux-ppc64le: https://dl.defined.net/02c6d0f9/v0.1.9/linux/ppc64le/dnclient, linux-riscv64: https://dl.defined.net/02c6d0f9/v0.1.9/linux/riscv64/dnclient, macos-universal: https://dl.defined.net/02c6d0f9/v0.1.9/macos/dnclient, macos-universal-dmg: https://dl.defined.net/02c6d0f9/v0.1.9/macos/dnclient.dmg, windows-amd64: https://dl.defined.net/02c6d0f9/v0.1.9/windows/amd64/DNClient.msi, windows-arm64: https://dl.defined.net/02c6d0f9/v0.1.9/windows/arm64/DNClient.msi mobile: android: https://play.google.com/store/apps/details?id=net.defined.mobile_nebula ios: https://apps.apple.com/us/app/mobile-nebula/id1509587936 versionInfo: dnclient: 0.1.5: latest: false releaseDate: '2022-07-13' 0.1.6: latest: false releaseDate: '2022-12-15' 0.1.7: latest: false releaseDate: '2022-12-16' 0.1.8: latest: false releaseDate: '2022-12-20' 0.1.9: latest: true releaseDate: '2023-03-15' latest: dnclient: 0.1.9 mobile: 0.2.0 components: securitySchemes: ApiToken: description: | Get an api key from https://admin.defined.net/settings/api-keys with the permission scopes required. type: http scheme: bearer bearerFormat: dnkey parameters: includeCounts: name: includeCounts in: query description: If true, return count of total records and current page start and count in metadata required: false schema: type: boolean default: false cursor: name: cursor in: query description: Cursor value at which to start the results, provided in `nextCursor` or `prevCursor` of a prior request example: bmV4dA.eyJsb2dzLmNyZQ5iIiwiX3ZhbHVlIjo9In19 schema: type: string pageSize: name: pageSize in: query description: Number of records to return in each page required: false schema: type: integer default: 25 maximum: 500 filter-isBlocked: name: filter.isBlocked in: query description: Return only hosts that are blocked if true, unblocked if false required: false schema: type: boolean filter-isLighthouse: name: filter.isLighthouse in: query description: Return only lighthouses if true, non-lighthouses if false required: false schema: type: boolean filter-isRelay: name: filter.isRelay in: query description: Return only relays if true, non-relays if false required: false schema: type: boolean filter-metadata-lastSeenAt: name: filter.metadata.lastSeenAt in: query description: When "null", returns hosts that have never communicated with the Defined Networking service. required: false schema: type: string enum: - 'null' filter-metadata-platform: name: filter.metadata.platform in: query description: Return only hosts matching the specified client platform required: false schema: type: string enum: - mobile - dnclient - 'null' filter-metadata-updateAvailable: name: filter.metadata.updateAvailable in: query description: Return only hosts that have updates available when true, or up-to-date hosts when false required: false schema: type: boolean filter-targetID: name: filter.targetID in: query description: Return only audit logs for the specified target required: false schema: type: string filter-targetType: name: filter.targetType in: query description: Return only audit logs matching the specified target type required: false schema: type: string enum: - apiKey - host - network - role - user - ca - oidcProvider schemas: Host: type: object properties: id: type: string organizationID: type: string networkID: type: string roleID: type: string nullable: true name: type: string ipAddress: type: string format: ipv4 staticAddresses: type: array items: type: string format: ipv4:port listenPort: type: integer format: int64 description: Will be zero if a regular host isLighthouse: type: boolean default: false isRelay: type: boolean default: false createdAt: type: string format: date-time isBlocked: type: boolean default: false metadata: type: object properties: lastSeenAt: type: string nullable: true version: type: string nullable: true platform: type: string nullable: true enum: - dnclient - mobile - null updateAvailable: type: boolean nullable: true PaginationMetadata: type: object properties: totalCount: type: integer description: The total number of resources existing in the account hasNextPage: type: boolean description: Is there a page of data that can be fetched using the `nextCursor`? hasPrevPage: type: boolean description: Is there a page of data that can be fetched using the `prevCursor`? nextCursor: type: string description: An opaque string that can be used to fetch the next page of results. Not provided if result set is empty. prevCursor: type: string description: An opaque string that can be used to fetch the next page of results. Not provided if result set is empty. page: type: object required: - count - start properties: count: type: integer description: The number of results returned in the response. start: type: integer description: The zero-based index of the first result within the overall list. For example, the first page will have a `start` of `0`. If 25 results are fetched, and the `nextCursor` used to fetch a new page of results, the second request's `start` will be `25`. Error: type: object required: - code - message properties: code: type: string description: A static name for the error type message: type: string description: A short human readable description of the error path: type: string nullable: true description: Describes the variable missing or malformed Errors: type: array items: $ref: '#/components/schemas/Error' FirewallRule: type: object required: - protocol properties: protocol: type: string enum: - ANY - TCP - UDP - ICMP description: type: string maxLength: 255 allowedRoleID: type: string description: Role ID to allow with this firewall rule. If not specified, all roles are included. portRange: type: object required: - from - to description: Range of ports for this firewall rule. If not provided or set to null, all ports are allowed. properties: from: type: integer description: First port number included in range. minimum: 1 maximum: 65535 to: type: integer description: Last port number included in range. Must be greater than `from` port. minimum: 1 maximum: 65535 Role: type: object properties: id: type: string name: type: string description: type: string firewallRules: type: array items: $ref: '#/components/schemas/FirewallRule' createdAt: type: string format: date-time modifiedAt: type: string format: date-time Network: type: object properties: id: type: string cidr: type: string format: ipv4/cidr organizationID: type: string signingCAID: description: The ID of the Certificate Authority being used. type: string createdAt: type: string format: date-time name: type: string default: Network1 lighthousesAsRelays: type: boolean Actor-APIKey: title: apiKey type: object properties: type: type: string description: An API key which used to perform the action. enum: - apiKey id: type: string name: type: string nullable: true Actor-Host: title: host type: object properties: type: type: string description: A host. Used for example when hosts are enrolled. enum: - host id: type: string name: type: string nullable: true Actor-OIDCUser: title: oidcUser type: object properties: type: type: string description: A user who logged in using SSO. enum: - oidcUser email: type: string format: email issuer: type: string subject: type: string Actor-Support: title: support type: object properties: type: type: string description: A member of Defined Networking support staff. enum: - support Actor-System: title: system type: object properties: type: type: string description: System actor, used for events such as creation or rotation of Certificate Authorities. enum: - system Actor-User: title: user type: object properties: type: type: string description: A logged-in user. enum: - user id: type: string email: type: string format: email Actor: description: The entity performing the action which caused a change. oneOf: - $ref: '#/components/schemas/Actor-APIKey' - $ref: '#/components/schemas/Actor-Host' - $ref: '#/components/schemas/Actor-OIDCUser' - $ref: '#/components/schemas/Actor-Support' - $ref: '#/components/schemas/Actor-System' - $ref: '#/components/schemas/Actor-User' Target: type: object description: The entity being acted upon. properties: id: type: string type: type: string enum: - apiKey - ca - host - network - oidcProvider - role - user Event: type: object description: Information about what happened, including relevant values before & after the change. properties: type: type: string description: The type of event that occurred. enum: - CREATED - UPDATED - DELETED - DELETED_TOTP - CREATED_TOTP - SUCCEEDED_AUTH - FAILED_AUTH - ENROLLED - RENEWED - CREATED_ENROLL_CODE - SET_NETWORK_CA - BLOCKED_HOST - UNBLOCKED_HOST - SET_OVERRIDES before: description: The state of the target before the change was made. The shape depends on the target and event type. Can also be a string or null (e.g. target was created). type: object nullable: true additionalProperties: {} after: description: The state of the target before the change was made. The shape depends on the target and event type. Can also be a string or null (e.g. target was deleted). type: object nullable: true additionalProperties: {} AuditLog: type: object properties: id: type: string organizationID: type: string timestamp: type: string format: date-time actor: $ref: '#/components/schemas/Actor' target: $ref: '#/components/schemas/Target' event: $ref: '#/components/schemas/Event' DownloadsDNClientLinks: type: object description: Download links for a given DNClient version properties: linux-amd64: type: string linux-arm64: type: string macos-universal: type: string macos-universal-dmg: type: string windows-amd64: type: string windows-arm64: type: string additionalProperties: x-additionalPropertiesName: os-platform type: string Downloads: type: object properties: dnclient: type: object properties: latest: description: Download links for the latest DNClient version $ref: '#/components/schemas/DownloadsDNClientLinks' additionalProperties: $ref: '#/components/schemas/DownloadsDNClientLinks' mobile: type: object properties: android: description: Mobile Nebula download URL for Android devices. type: string ios: description: Mobile Nebula download URL for iOS devices. type: string versionInfo: type: object properties: dnclient: description: Information about available DNClient releases type: object additionalProperties: description: Information about a given DNClient release type: object properties: releaseDate: type: string latest: type: boolean latest: description: The latest version for each software download. type: object properties: dnclient: description: The latest version of DNClient. type: string mobile: description: The latest version of Mobile Nebula. type: string