{ "openapi": "3.0.0", "info": { "description": "ZeroTier Central Network Management Portal API.

All API requests must have an API token header specified in the Authorization: token xxxxx format. You can generate your API key by logging into ZeroTier Central and creating a token on the Account page.

eg. curl -X GET -H \"Authorization: token xxxxx\" https://api.zerotier.com/api/v1/network

Rate Limiting

The ZeroTier Central API implements rate limiting. Paid users are limited to 100 requests per second. Free users are limited to 20 requests per second.

You can get the OpenAPI spec here as well: https://docs.zerotier.com/openapi/centralv1.json

", "version": "v1", "title": "ZeroTier Central API", "contact": { "name": "ZeroTier Support Discussion Forum", "url": "https://discuss.zerotier.com" }, "license": { "name": "Apache 2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0.html" } }, "servers": [ { "url": "https://api.zerotier.com/api/v1", "description": "Production Server" } ], "tags": [ { "name": "network", "description": "Network operations" }, { "name": "network-member", "description": "Network member operations" }, { "name": "user", "description": "User management operations" }, { "name": "organizations", "description": "Organization management. Note: Organizations require a paid account and cannot be created via the API" }, { "name": "util", "description": "Utility endpoints" } ], "paths": { "/status": { "get": { "tags": ["util"], "summary": "Obtain the overall status of the account tied to the API token in use.", "operationId": "getStatus", "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Status" } } } } } } }, "/network": { "get": { "tags": ["network"], "summary": "Returns a list of Networks you have access to.", "operationId": "getNetworkList", "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Network" } } } } }, "403": { "$ref": "#/components/responses/UnauthorizedError" } } }, "post": { "tags": ["network"], "summary": "Create a new network.", "operationId": "newNetwork", "requestBody": { "description": "empty JSON object", "required": true, "content": { "application/json": { "schema": { "type": "object" } } } }, "responses": { "200": { "description": "Network creation succeeded", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Network" } } } }, "403": { "$ref": "#/components/responses/UnauthorizedError" } } } }, "/network/{networkID}": { "get": { "tags": ["network"], "summary": "Get network by ID", "description": "Returns a single network", "operationId": "getNetworkByID", "parameters": [ { "name": "networkID", "description": "ID of the network to return", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "get success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Network" } } } }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } }, "post": { "tags": ["network"], "summary": "update network configuration", "operationId": "updateNetwork", "parameters": [ { "name": "networkID", "description": "ID of the network to change", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "description": "Network object JSON", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Network" } } } }, "responses": { "200": { "description": "success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Network" } } } }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } }, "delete": { "tags": ["network"], "summary": "delete network", "operationId": "deleteNetwork", "parameters": [ { "name": "networkID", "description": "ID of the network", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "network deleted" }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } } }, "/network/{networkID}/member": { "get": { "tags": ["network-member"], "summary": "Returns a list of Members on the network.", "operationId": "getNetworkMemberList", "parameters": [ { "name": "networkID", "description": "ID of the network to return", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "member list get success", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Member" } } } } }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } } }, "/network/{networkID}/member/{memberID}": { "get": { "tags": ["network-member"], "operationId": "getNetworkMember", "summary": "Return an individual member on a network", "parameters": [ { "name": "networkID", "description": "ID of the network", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "memberID", "description": "ID of the member", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "member get success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Member" } } } }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } }, "post": { "tags": ["network-member"], "operationId": "updateNetworkMember", "summary": "Modify a network member", "parameters": [ { "name": "networkID", "description": "ID of the network", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "memberID", "description": "ID of the member", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "description": "Member object JSON", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Member" } } } }, "responses": { "200": { "description": "member changed successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Member" } } } }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } }, "delete": { "tags": ["network-member"], "operationId": "deleteNetworkMember", "summary": "Delete a network member", "parameters": [ { "name": "networkID", "description": "ID of the network", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "memberID", "description": "ID of the member", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "member deleted" }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } } }, "/user/{userID}": { "get": { "tags": ["user"], "operationId": "getUserByID", "summary": "Get user record", "parameters": [ { "name": "userID", "description": "User ID", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "User get success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/User" } } } }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } }, "post": { "tags": ["user"], "operationId": "updateUserByID", "summary": "Update user record (SMS number or Display Name only)", "parameters": [ { "name": "userID", "description": "User ID", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "description": "User object JSON", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/User" } } } }, "responses": { "200": { "description": "User update success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/User" } } } }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } }, "delete": { "tags": ["user"], "operationId": "deleteUserByID", "summary": "Delete user", "description": "Deletes the user and all associated networks. This is not reversible. Delete at your own risk.", "parameters": [ { "name": "userID", "description": "User ID", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "user deleted" }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } } }, "/user/{userID}/token": { "post": { "tags": ["user"], "operationId": "addAPIToken", "summary": "Add an API token", "parameters": [ { "name": "userID", "description": "User ID", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "description": "APIToken JSON object", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/APIToken" } } } }, "responses": { "200": { "description": "API Token added", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/APIToken" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } } }, "/user/{userID}/token/{tokenName}": { "delete": { "tags": ["user"], "operationId": "deleteAPIToken", "summary": "Delete API Token", "parameters": [ { "name": "userID", "description": "User ID", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "tokenName", "description": "Token Name", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "API token deleted" }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } } }, "/org": { "get": { "tags": ["organizations"], "operationId": "getOrganization", "summary": "Get the current user's organization", "responses": { "200": { "description": "Get my organization", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Organization" } } } }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } } }, "/org/{orgID}": { "get": { "tags": ["organizations"], "operationId": "getOrganizationByID", "summary": "Get organization by ID", "parameters": [ { "name": "orgID", "description": "Organization ID", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Organization", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Organization" } } } }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } } }, "/org/{orgID}/user": { "get": { "tags": ["organizations"], "operationId": "getOrganizationMembers", "summary": "Get list of organization members", "parameters": [ { "name": "orgID", "description": "Organization ID", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Get organization members success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrganizationMember" } } } }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } } }, "/org-invitation": { "get": { "tags": ["organizations"], "operationId": "getOrganizationInvitationList", "summary": "Get list of organization invitations", "responses": { "200": { "description": "Get list of invitations", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/OrganizationInvitation" } } } } }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } }, "post": { "tags": ["organizations"], "operationId": "inviteUserByEmail", "summary": "Invite a user to your organization by email", "requestBody": { "description": "Organization Invitation JSON object", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrganizationInvitation" } } } }, "responses": { "200": { "description": "User invited to organization", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrganizationInvitation" } } } }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } } }, "/org-invitation/{inviteID}": { "get": { "tags": ["organizations"], "operationId": "getInvitationByID", "summary": "Get organization invitation", "parameters": [ { "name": "inviteID", "description": "Invitation ID", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Get organization invitation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrganizationInvitation" } } } }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } }, "post": { "tags": ["organizations"], "operationId": "acceptInvitation", "summary": "Accept organization invitation", "parameters": [ { "name": "inviteID", "description": "Invitation ID", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Organization invitation accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrganizationInvitation" } } } }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } }, "delete": { "tags": ["organizations"], "operationId": "declineInvitation", "summary": "Decline organization invitation", "parameters": [ { "name": "inviteID", "description": "Invitation ID", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "organization invitation declined" }, "401": { "$ref": "#/components/responses/UnauthorizedError" }, "403": { "$ref": "#/components/responses/AccessDeniedError" }, "404": { "$ref": "#/components/responses/NotFound" } } } }, "/randomToken": { "get": { "tags": ["util"], "operationId": "getRandomToken", "summary": "Get a random 32 character token", "description": "Get a random 32 character. Used by the web UI to generate API keys", "responses": { "200": { "description": "Random token", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RandomToken" } } } } } } } }, "components": { "securitySchemes": { "tokenAuth": { "type": "http", "scheme": "token" } }, "responses": { "BadRequest": { "description": "Bad request" }, "AccessDeniedError": { "description": "Access denied" }, "NotFound": { "description": "Item not found" }, "UnauthorizedError": { "description": "Authorization required" } }, "schemas": { "Network": { "type": "object", "properties": { "id": { "type": "string", "example": "8056c2e21c000001", "readOnly": true, "nullable": true }, "clock": { "type": "integer", "format": "int64", "example": 12345, "readOnly": true, "nullable": true }, "config": { "$ref": "#/components/schemas/NetworkConfig", "nullable": true }, "description": { "type": "string", "example": "Some descriptive text about my network.", "nullable": true }, "rulesSource": { "type": "string", "example": "accept;", "nullable": true }, "permissions": { "$ref": "#/components/schemas/PermissionsMap", "nullable": true }, "ownerId": { "type": "string", "example": "00000000-0000-0000-0000-000000000000", "nullable": true }, "onlineMemberCount": { "type": "integer", "example": 123, "readOnly": true, "nullable": true, "description": "Note: May be 0 on endpoints returning lists of Networks" }, "authorizedMemberCount": { "type": "integer", "example": 200, "readOnly": true, "nullable": true }, "totalMemberCount": { "type": "integer", "example": 250, "readOnly": true, "nullable": true }, "capabilitiesByName": { "type": "object", "nullable": true }, "tagsByName": { "type": "object", "nullable": true } }, "description": "Network object" }, "NetworkConfig": { "type": "object", "properties": { "id": { "type": "string", "example": "8056c2e21c000001", "description": "Network ID", "readOnly": true, "nullable": true }, "creationTime": { "type": "integer", "format": "int64", "example": 1442292672978, "description": "Time the network was created", "readOnly": true, "nullable": true }, "capabilities": { "type": "array", "description": "Array of network capabilities", "items": { "type": "object" }, "nullable": true }, "dns": { "type": "object", "$ref": "#/components/schemas/DNS", "nullable": true }, "enableBroadcast": { "type": "boolean", "example": true, "description": "Enable broadcast packets on the network", "nullable": true }, "ipAssignmentPools": { "type": "array", "description": "Range of IP addresses for the auto assign pool", "items": { "$ref": "#/components/schemas/IPRange" }, "nullable": true }, "lastModified": { "type": "integer", "format": "int64", "example": 1588184318235, "description": "Time the network was last modified", "readOnly": true, "nullable": true }, "mtu": { "type": "integer", "example": 2800, "description": "MTU to set on the client virtual network adapter", "nullable": true }, "multicastLimit": { "type": "integer", "example": 32, "description": "Maximum number of recipients per multicast or broadcast. Warning - Setting this to 0 will disable IPv4 communication on your network!", "nullable": true }, "name": { "type": "string", "example": "My ZeroTier Network", "nullable": true }, "private": { "type": "boolean", "example": true, "description": "Whether or not the network is private. If false, members will *NOT* need to be authorized to join.", "nullable": true }, "routes": { "type": "array", "items": { "$ref": "#/components/schemas/Route" }, "nullable": true }, "rules": { "type": "array", "items": { "type": "object" }, "nullable": true }, "tags": { "type": "array", "items": { "type": "object" }, "nullable": true }, "v4AssignMode": { "$ref": "#/components/schemas/IPV4AssignMode", "nullable": true }, "v6AssignMode": { "$ref": "#/components/schemas/IPV6AssignMode", "nullable": true } } }, "Member": { "type": "object", "properties": { "id": { "type": "string", "example": "8056c2e21c000001-abcdef0123", "description": "concatenation of network ID and member ID", "readOnly": true, "deprecated": true, "nullable": true }, "clock": { "type": "integer", "format": "int64", "example": 1612993759070, "readOnly": true, "nullable": true }, "networkId": { "type": "string", "example": "8056c2e21c000001", "readOnly": true, "nullable": true }, "nodeId": { "type": "string", "example": "abcdef01234", "description": "ZeroTier ID of the member", "readOnly": true, "nullable": true }, "controllerId": { "type": "string", "example": "8056c2e21c", "readOnly": true, "deprecated": true, "nullable": true }, "hidden": { "type": "boolean", "example": false, "description": "Whether or not the member is hidden in the UI", "nullable": true }, "name": { "type": "string", "example": "my-cray-supercomputer", "readOnly": false, "description": "User defined name of the member", "nullable": true }, "description": { "type": "string", "example": "My super awesome cray that I got ZeroTier to run on", "readOnly": false, "description": "User defined description of the member", "nullable": true }, "config": { "$ref": "#/components/schemas/MemberConfig", "nullable": true }, "lastOnline": { "type": "integer", "format": "int64", "readOnly": true, "description": "Last seen time of the member. Note: This data is considered ephemeral and may be reset to 0 at any time without warning.", "example": 1612993673254, "nullable": true }, "physicalAddress": { "type": "string", "readOnly": true, "description": "IP address the member last spoke to the controller via. Note: This data is considered ephemeral and may be reset to 0 at any time without warning.", "example": "8.8.8.8", "nullable": true }, "clientVersion": { "type": "string", "readOnly": true, "description": "ZeroTier version the member is running", "example": "1.6.3", "nullable": true }, "protocolVersion": { "type": "integer", "readOnly": true, "description": "ZeroTier protocol version", "example": 12, "nullable": true }, "supportsRulesEngine": { "type": "boolean", "readOnly": true, "description": "Whether or not the client version is new enough to support the rules engine (1.4.0+)", "nullable": true } } }, "MemberConfig": { "type": "object", "properties": { "activeBridge": { "type": "boolean", "readOnly": false, "description": "Allow the member to be a bridge on the network", "example": false, "nullable": true }, "authorized": { "type": "boolean", "readOnly": false, "description": "Is the member authorized on the network", "example": true, "nullable": true }, "capabilities": { "type": "array", "items": { "type": "integer" }, "nullable": true }, "creationTime": { "type": "integer", "format": "int64", "readOnly": true, "description": "Time the member was created or first tried to join the network", "example": 1599853509872, "nullable": true }, "id": { "type": "string", "readOnly": true, "description": "ID of the member node. This is the 10 digit identifier that identifies a ZeroTier node.", "example": "abcdef01234", "nullable": true }, "identity": { "type": "string", "readOnly": true, "description": "Public Key of the member's Identity", "example": "abcdef0123:0:abcdef0123abcdef0123abcdef0123abcdef0123abcdef0123abcdef0123abcdef0123", "nullable": true }, "ipAssignments": { "type": "array", "readOnly": false, "description": "List of assigned IP addresses", "items": { "type": "string" }, "example": ["10.0.0.3"], "nullable": true }, "lastAuthorizedTime": { "type": "integer", "format": "int64", "readOnly": true, "description": "Time the member was authorized on the network", "example": 1599853637989, "nullable": true }, "lastDeauthorizedTime": { "type": "integer", "format": "int64", "readOnly": true, "description": "Time the member was deauthorized on the network", "example": 0, "nullable": true }, "noAutoAssignIps": { "type": "boolean", "readOnly": false, "description": "Exempt this member from the IP auto assignment pool on a Network", "example": false, "nullable": true }, "revision": { "type": "integer", "readOnly": true, "description": "Member record revision count", "example": 123, "nullable": true }, "tags": { "type": "array", "items": { "type": "array", "items": { "anyOf": [{ "type": "integer" }, { "type": "boolean" }] } }, "nullable": true, "readOnly": false, "description": "Array of 2 member tuples of tag [ID, tag value]", "example": [[123, 456]] }, "vMajor": { "type": "integer", "readOnly": true, "description": "Major version of the client", "example": 1, "nullable": true }, "vMinor": { "type": "integer", "readOnly": true, "description": "Minor version of the client", "example": 6, "nullable": true }, "vRev": { "type": "integer", "readOnly": true, "description": "Revision number of the client", "example": 3, "nullable": true }, "vProto": { "type": "integer", "readOnly": true, "description": "Protocol version of the client", "example": 12, "nullable": true } } }, "User": { "type": "object", "properties": { "id": { "type": "string", "readOnly": true, "description": "User ID", "example": "00000000-0000-0000-0000-000000000000" }, "orgId": { "type": "string", "readOnly": true, "description": "Organization ID", "example": "00000000-0000-0000-0000-000000000000" }, "globalPermissions": { "readOnly": true, "allOf": [ { "$ref": "#/components/schemas/Permissions" } ] }, "displayName": { "type": "string", "readOnly": false, "description": "Display Name", "example": "Joe User" }, "email": { "type": "string", "readOnly": true, "description": "User email address", "example": "user@example.com" }, "auth": { "readOnly": true, "allOf": [ { "$ref": "#/components/schemas/AuthMethods" } ] }, "smsNumber": { "type": "string", "readOnly": false, "description": "SMS number", "example": "+1-800-555-1212", "deprecated": true }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": ["my-token-id"], "description": "List of API token names." } } }, "Organization": { "type": "object", "properties": { "id": { "type": "string", "example": "00000000-0000-0000-0000-000000000000", "description": "Organization ID" }, "ownerId": { "type": "string", "description": "User ID of the organization owner", "example": "00000000-0000-0000-0000-000000000000", "readOnly": true }, "ownerEmail": { "type": "string", "description": "Organization owner's email address", "example": "user@example.com", "readOnly": true }, "members": { "type": "array", "items": { "$ref": "#/components/schemas/OrganizationMember" }, "description": "List of organization members" }, "ssoConfig": { "type": "object", "$ref": "#/components/schemas/SsoConfig", "description": "Organization wide SSO configuration" } } }, "SsoConfig": { "type": "object", "properties": { "clientId": { "type": "string", "example": "oidc-client-id", "description": "OIDC Client ID" }, "issuer": { "type": "string", "example": "https://example.com/oidc/auth", "description": "OIDC Issuer URL" }, "enabled": { "type": "boolean", "example": true, "description": "Enabled flag for SSO" } } }, "OrganizationMember": { "type": "object", "properties": { "orgId": { "type": "string", "readOnly": true, "description": "Organization ID", "example": "00000000-0000-0000-0000-000000000000" }, "userId": { "type": "string", "readOnly": false, "description": "User ID", "example": "00000000-0000-0000-0000-000000000000" }, "name": { "type": "string", "readOnly": true, "nullable": true, "description": "Organization member display name", "example": "Joe User" }, "email": { "type": "string", "readOnly": true, "nullable": true, "description": "Organization member email address" } } }, "OrganizationInvitation": { "type": "object", "properties": { "orgId": { "type": "string", "description": "Organization ID", "example": "00000000-0000-0000-0000-000000000000", "readOnly": true }, "email": { "type": "string", "description": "Email address of invitee", "example": "joe@user.com" }, "id": { "type": "string", "description": "Invitation ID", "example": "00000000-0000-0000-0000-000000000000", "readOnly": true }, "creation_time": { "type": "integer", "format": "int64", "description": "Creation time of the invite", "example": 1613067920454, "readOnly": true }, "status": { "readOnly": true, "description": "Invitation status", "example": "pending", "allOf": [ { "$ref": "#/components/schemas/InviteStatus" } ] }, "update_time": { "type": "integer", "format": "int64", "description": "Last updated time of the invitation", "example": 1613067920454, "readOnly": true }, "ownerEmail": { "type": "string", "description": "Organization owner email address", "example": "user@example.com", "readOnly": true } } }, "PermissionsMap": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/Permissions" }, "example": { "00000000-0000-0000-0000-000000000000": { "a": true, "d": true, "m": true, "r": true } } }, "Permissions": { "type": "object", "properties": { "a": { "type": "boolean", "example": true, "description": "Authorize permission" }, "d": { "type": "boolean", "example": true, "description": "Delete permission" }, "m": { "type": "boolean", "example": true, "description": "Modify network settings permission" }, "r": { "type": "boolean", "example": true, "description": "Read network settings permission" } } }, "IPRange": { "type": "object", "properties": { "ipRangeStart": { "type": "string", "example": "10.0.0.1" }, "ipRangeEnd": { "type": "string", "example": "10.0.0.255" } } }, "DNS": { "type": "object", "properties": { "domain": { "type": "string", "example": "some.domain", "description": "Search domain to use for DNS records" }, "servers": { "type": "array", "items": { "type": "string" }, "example": ["10.0.0.3"], "description": "IP address of unicast DNS service", "nullable": true } } }, "Route": { "type": "object", "properties": { "target": { "type": "string", "example": "10.0.0.0/24" }, "via": { "type": "string", "example": null, "nullable": true } } }, "IPV4AssignMode": { "type": "object", "properties": { "zt": { "type": "boolean", "example": true } } }, "IPV6AssignMode": { "type": "object", "properties": { "6plane": { "type": "boolean", "example": true, "nullable": true }, "rfc4193": { "type": "boolean", "example": false, "nullable": true }, "zt": { "type": "boolean", "example": false, "nullable": true } } }, "AuthMethods": { "type": "object", "properties": { "local": { "type": "string", "example": "user@example.com", "description": "email address for built-in authentication", "nullable": true, "readOnly": true }, "google": { "type": "string", "example": "156162346876134683", "description": "Google OIDC ID", "nullable": true, "readOnly": true }, "oidc": { "type": "string", "example": "00000000-0000-0000-0000-000000000000", "description": "Generic OIDC ID", "nullable": true, "readOnly": true } } }, "APIToken": { "type": "object", "properties": { "tokenName": { "type": "string", "example": "my-super-secret-token", "description": "user specified token name", "readOnly": false }, "token": { "type": "string", "example": "adsf98ashdkjh3689adsfnj3$ADn", "description": "API Token. Minimum 32 characters. This token is encrypted in the database and can not be retrieved once set", "readOnly": false, "writeOnly": true } } }, "InviteStatus": { "type": "string", "enum": ["pending", "accepted", "canceled"] }, "Status": { "type": "object", "properties": { "id": { "type": "string", "example": "central_status" }, "type": { "type": "string", "example": "CentralStatus" }, "clock": { "type": "integer", "format": "int64", "example": 1613067920454, "readOnly": true, "description": "Current time on server" }, "version": { "type": "string", "example": "1.6.5" }, "apiVersion": { "type": "string", "example": "4" }, "uptime": { "type": "integer", "format": "int64", "example": 1613067920454, "readOnly": true, "description": "Uptime on server" }, "user": { "$ref": "#/components/schemas/User" }, "readOnlyMode": { "type": "boolean" }, "loginMethods": { "type": "object", "properties": { "local": { "type": "boolean" }, "google": { "type": "boolean" }, "twitter": { "type": "boolean" }, "facebook": { "type": "boolean" }, "github": { "type": "boolean" }, "saml": { "type": "boolean" }, "oidc": { "type": "boolean" } } } } }, "RandomToken": { "type": "object", "properties": { "clock": { "type": "integer", "format": "int64", "example": 1613067920454, "readOnly": true, "description": "Current time on server" }, "hex": { "type": "string", "example": "16924f3ff478526cffb1b89b1040b33c8dbd3c09e07f39691f615769121c0d76", "readOnly": true, "description": "hex encoded random bytes of the token" }, "token": { "type": "string", "example": "wwrb66uUh18Fqc38rd8jMd5RFJzRsCn4", "readOnly": true, "description": "Random 32 character token" } } } } }, "security": [ { "bearerAuth": [] } ] }