Kentik Sites API (v6)
Model physical/logical sites and their addresses for network topology and grouping.
Model physical/logical sites and their addresses for network topology and grouping.
{
"openapi": "3.0.0",
"info": {
"title": "Site Configuration API",
"description": "# Overview\nThe Site Configuration API provides programmatic access to configuration of Sites and Site Markets:\n\n* **Site**: A site is a specific user-defined physical location (e.g. a data center at a given address) or logical location at which there is hosting of your devices, services, providers, or partner networks. Information that can be associated with a site includes the classification of IP addresses and the site's logical network topology/architecture.\n* **Site Market**: Sites with any common characteristics of your choosing (e.g. all PoPs in a particular region) can be logically grouped into a site market.\n\nBoth REST endpoint and gRPC RPCs are provided.\n\n***Notes:*** \n - Once a site is created in Kentik, you can assign one or more devices to the site via the settings for those devices; to do so programmatically you'd use the v5 Device API (see [Device Create](https://kb.kentik.com/v0/Ec05.htm#Ec05-Device_Create)).\n - Sites can also be managed using the legacy REST-only [Site API](https://kb.kentik.com/v0/Ec10.htm#Ec10-Site_API), which provides access to a subset of site configuration attributes.",
"version": "v202509",
"contact": {
"name": "Kentik API Engineering",
"url": "https://github.com/kentik/api-schema-public"
}
},
"tags": [
{
"name": "SiteService"
}
],
"paths": {
"/site/v202509/site_markets": {
"get": {
"summary": "List all site markets.",
"description": "Returns list of configured site markets.",
"operationId": "ListSiteMarkets",
"responses": {
"200": {
"description": "A successful response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/v202509ListSiteMarketsResponse"
}
}
}
},
"default": {
"description": "An unexpected error response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/rpcStatus"
}
}
}
}
},
"tags": [
"SiteService"
]
},
"post": {
"summary": "Configure a new site market.",
"description": "Create configuration for a new site market. Returns the newly created configuration.",
"operationId": "CreateSiteMarket",
"responses": {
"200": {
"description": "A successful response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/v202509CreateSiteMarketResponse"
}
}
}
},
"default": {
"description": "An unexpected error response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/rpcStatus"
}
}
}
}
},
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/v202509CreateSiteMarketRequest"
}
}
},
"required": true
},
"tags": [
"SiteService"
]
}
},
"/site/v202509/site_markets/{id}": {
"get": {
"summary": "Retrieve configuration of a site market.",
"description": "Returns configuration of a site market specified by ID.",
"operationId": "GetSiteMarket",
"responses": {
"200": {
"description": "A successful response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/v202509GetSiteMarketResponse"
}
}
}
},
"default": {
"description": "An unexpected error response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/rpcStatus"
}
}
}
}
},
"parameters": [
{
"name": "id",
"description": "ID of the requested site market",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"tags": [
"SiteService"
]
},
"delete": {
"summary": "Delete configuration of a site market.",
"description": "Deletes configuration of a site market with specific ID.",
"operationId": "DeleteSiteMarket",
"responses": {
"200": {
"description": "A successful response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/v202509DeleteSiteMarketResponse"
}
}
}
},
"default": {
"description": "An unexpected error response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/rpcStatus"
}
}
}
}
},
"parameters": [
{
"name": "id",
"description": "ID of the site market to be deleted",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"tags": [
"SiteService"
]
},
"put": {
"summary": "Updates configuration of a site market.",
"description": "Replaces configuration of a site market with attributes in the request. Returns the updated configuration.",
"operationId": "UpdateSiteMarket",
"responses": {
"200": {
"description": "A successful response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/v202509UpdateSiteMarketResponse"
}
}
}
},
"default": {
"description": "An unexpected error response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/rpcStatus"
}
}
}
}
},
"parameters": [
{
"name": "id",
"description": "System generated unique identifier",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SiteServiceUpdateSiteMarketBody"
}
}
},
"required": true
},
"tags": [
"SiteService"
]
}
},
"/site/v202509/sites": {
"get": {
"summary": "List all sites.",
"description": "Returns list of configured sites.",
"operationId": "ListSites",
"responses": {
"200": {
"description": "A successful response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/v202509ListSitesResponse"
}
}
}
},
"default": {
"description": "An unexpected error response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/rpcStatus"
}
}
}
}
},
"tags": [
"SiteService"
]
},
"post": {
"summary": "Configure a new site.",
"description": "Create configuration for a new site. Returns the newly created configuration.",
"operationId": "CreateSite",
"responses": {
"200": {
"description": "A successful response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/v202509CreateSiteResponse"
}
}
}
},
"default": {
"description": "An unexpected error response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/rpcStatus"
}
}
}
}
},
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/v202509CreateSiteRequest"
}
}
},
"required": true
},
"tags": [
"SiteService"
]
}
},
"/site/v202509/sites/{id}": {
"get": {
"summary": "Retrieve configuration of a site.",
"description": "Returns configuration of a site specified by ID.",
"operationId": "GetSite",
"responses": {
"200": {
"description": "A successful response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/v202509GetSiteResponse"
}
}
}
},
"default": {
"description": "An unexpected error response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/rpcStatus"
}
}
}
}
},
"parameters": [
{
"name": "id",
"description": "ID of the requested site",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"tags": [
"SiteService"
]
},
"delete": {
"summary": "Delete configuration of a site.",
"description": "Deletes configuration of a site with specific ID.",
"operationId": "DeleteSite",
"responses": {
"200": {
"description": "A successful response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/v202509DeleteSiteResponse"
}
}
}
},
"default": {
"description": "An unexpected error response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/rpcStatus"
}
}
}
}
},
"parameters": [
{
"name": "id",
"description": "ID of the site to be deleted",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"tags": [
"SiteService"
]
},
"put": {
"summary": "Updates configuration of a site.",
"description": "Replaces configuration of a site with attributes in the request. Returns the updated configuration.",
"operationId": "UpdateSite",
"responses": {
"200": {
"description": "A successful response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/v202509UpdateSiteResponse"
}
}
}
},
"default": {
"description": "An unexpected error response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/rpcStatus"
}
}
}
}
},
"parameters": [
{
"name": "id",
"description": "System generated unique identifier",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SiteServiceUpdateSiteBody"
}
}
},
"required": true
},
"tags": [
"SiteService"
]
}
}
},
"security": [
{
"email": [],
"token": []
}
],
"externalDocs": {
"description": "General information about Kentik APIs",
"url": "https://kb.kentik.com/v0/Ab09.htm#Ab09-APIs_Overview"
},
"components": {
"securitySchemes": {
"email": {
"type": "apiKey",
"name": "X-CH-Auth-Email",
"in": "header"
},
"token": {
"type": "apiKey",
"name": "X-CH-Auth-API-Token",
"in": "header"
}
},
"schemas": {
"SiteServiceUpdateSiteBody": {
"type": "object",
"properties": {
"site": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "User selected title/name"
},
"lat": {
"type": "number",
"format": "double",
"description": "Latitude (signed decimal degrees)"
},
"lon": {
"type": "number",
"format": "double",
"description": "Longitude (signed decimal degrees)"
},
"postalAddress": {
"$ref": "#/components/schemas/v202509PostalAddress"
},
"type": {
"$ref": "#/components/schemas/v202509SiteType"
},
"addressClassification": {
"$ref": "#/components/schemas/v202509SiteIpAddressClassification"
},
"architecture": {
"type": "array",
"items": {
"$ref": "#/components/schemas/v202509LayerSet"
},
"description": "Logical network topology/architecture"
},
"siteMarket": {
"$ref": "#/components/schemas/v202509SiteMarket"
},
"peeringdbSiteMapping": {
"type": "array",
"items": {
"$ref": "#/components/schemas/v202509PeeringDBSiteMapping"
},
"description": "List of PeeringDB site mappings associated with this site"
}
},
"title": "Site"
}
},
"title": "UpdateSiteRequest",
"required": [
"title",
"type",
"site"
]
},
"SiteServiceUpdateSiteMarketBody": {
"type": "object",
"properties": {
"siteMarket": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "User selected unique name"
},
"description": {
"type": "string",
"description": "Free-form description"
},
"numberOfSites": {
"type": "integer",
"format": "int64",
"description": "Number of sites in this market",
"readOnly": true
},
"cdate": {
"type": "string",
"format": "date-time",
"description": "Creation timestamp (UTC)",
"readOnly": true
},
"edate": {
"type": "string",
"format": "date-time",
"description": "Last modification timestamp (UTC)",
"readOnly": true
}
},
"title": "SiteMarket"
}
},
"title": "UpdateSiteMarketRequest",
"required": [
"name",
"siteMarket"
]
},
"protobufAny": {
"type": "object",
"properties": {
"@type": {
"type": "string"
}
},
"additionalProperties": {}
},
"rpcStatus": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"$ref": "#/components/schemas/protobufAny"
}
}
}
},
"v202509CreateSiteMarketRequest": {
"type": "object",
"properties": {
"siteMarket": {
"$ref": "#/components/schemas/v202509SiteMarket"
}
},
"title": "CreateSiteMarketRequest",
"required": [
"siteMarket"
]
},
"v202509CreateSiteMarketResponse": {
"type": "object",
"properties": {
"siteMarket": {
"$ref": "#/components/schemas/v202509SiteMarket"
}
},
"title": "CreateSiteMarketResponse"
},
"v202509CreateSiteRequest": {
"type": "object",
"properties": {
"site": {
"$ref": "#/components/schemas/v202509Site"
}
},
"title": "CreateSiteRequest",
"required": [
"site"
]
},
"v202509CreateSiteResponse": {
"type": "object",
"properties": {
"site": {
"$ref": "#/components/schemas/v202509Site"
}
},
"title": "CreateSiteResponse"
},
"v202509DeleteSiteMarketResponse": {
"type": "object",
"title": "DeleteSiteMarketResponse"
},
"v202509DeleteSiteResponse": {
"type": "object",
"title": "DeleteSiteResponse"
},
"v202509GetSiteMarketResponse": {
"type": "object",
"properties": {
"siteMarket": {
"$ref": "#/components/schemas/v202509SiteMarket"
}
},
"title": "GetSiteMarketResponse"
},
"v202509GetSiteResponse": {
"type": "object",
"properties": {
"site": {
"$ref": "#/components/schemas/v202509Site"
}
},
"title": "GetSiteResponse"
},
"v202509Layer": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Name of the network layer"
},
"deviceIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of devices that are deemed to be part of the network layer"
}
},
"title": "Layer"
},
"v202509LayerSet": {
"type": "object",
"properties": {
"layers": {
"type": "array",
"items": {
"$ref": "#/components/schemas/v202509Layer"
},
"description": "List of parallel network layers"
}
},
"title": "LayerSet"
},
"v202509ListSiteMarketsResponse": {
"type": "object",
"properties": {
"siteMarkets": {
"type": "array",
"items": {
"$ref": "#/components/schemas/v202509SiteMarket"
},
"description": "List of configurations of requested site markets"
},
"invalidCount": {
"type": "integer",
"format": "int64",
"description": "Number of invalid entries encountered while collecting data"
}
},
"title": "ListSiteMarketsResponse"
},
"v202509ListSitesResponse": {
"type": "object",
"properties": {
"sites": {
"type": "array",
"items": {
"$ref": "#/components/schemas/v202509Site"
},
"description": "List of configurations of requested sites"
},
"invalidCount": {
"type": "integer",
"format": "int64",
"description": "Number of invalid entries encountered while collecting data"
}
},
"title": "ListSitesResponse"
},
"v202509PeeringDBSiteMapping": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Peering DB id"
},
"siteId": {
"type": "string",
"description": "Peering DB site id"
},
"peeringdbFacId": {
"type": "string",
"description": "Peering DB facility id"
},
"edate": {
"type": "string",
"format": "date-time",
"description": "Last modification timestamp (UTC)",
"readOnly": true
},
"cdate": {
"type": "string",
"format": "date-time",
"description": "Creation timestamp (UTC)",
"readOnly": true
},
"companyId": {
"type": "string",
"description": "Company ID"
}
},
"required": [
"id",
"siteId",
"peeringdbFacId"
]
},
"v202509PostalAddress": {
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Street address"
},
"city": {
"type": "string",
"description": "City (full name)"
},
"region": {
"type": "string",
"description": "Geographical region"
},
"postalCode": {
"type": "string",
"description": "Country specific postal code"
},
"country": {
"type": "string",
"description": "Country (full name or country code)"
}
},
"title": "PostalAddress",
"required": [
"address",
"city",
"country"
]
},
"v202509Site": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "System generated unique identifier",
"readOnly": true
},
"title": {
"type": "string",
"description": "User selected title/name"
},
"lat": {
"type": "number",
"format": "double",
"description": "Latitude (signed decimal degrees)"
},
"lon": {
"type": "number",
"format": "double",
"description": "Longitude (signed decimal degrees)"
},
"postalAddress": {
"$ref": "#/components/schemas/v202509PostalAddress"
},
"type": {
"$ref": "#/components/schemas/v202509SiteType"
},
"addressClassification": {
"$ref": "#/components/schemas/v202509SiteIpAddressClassification"
},
"architecture": {
# --- truncated at 32 KB (37 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kentik/refs/heads/main/openapi/kentik-site-openapi.json