diff --git a/package.json b/package.json index 324e380..12a5d57 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "@types/source-map-support": "^0", "@types/supertest": "^6.0.2", "@types/wait-on": "^5.3.4", - "axios": "^1.7.7", + "axios": "^1.8.2", "axios-mock-adapter": "^1.22.0", "concurrently": "^8.2.2", "eslint": "^9.14.0", @@ -35,7 +35,7 @@ "tsconfig-paths": "^4.2.0", "typescript": "~5.5.4", "typescript-eslint": "^8.13.0", - "wait-on": "^8.0.1" + "wait-on": "^8.0.3" }, "dependencies": { "date-fns": "^4.1.0", @@ -62,5 +62,12 @@ "lint-staged": { "*.{js,ts,mjs,json,md,yml,yaml}": "yarn run prettier --write", "*.{ts,js,mjs}": "yarn run eslint --fix" + }, + "resolutions": { + "cross-spawn": "7.0.5", + "path-to-regexp": "0.1.12", + "axios": "^1.8.2", + "@babel/helpers": "7.26.10", + "@babel/runtime": "7.26.10" } } diff --git a/specs/mef-api.json b/specs/mef-api.json new file mode 100644 index 0000000..39076b3 --- /dev/null +++ b/specs/mef-api.json @@ -0,0 +1,38583 @@ +{ + "openapi": "3.0.0", + "info": { + "description": "This document provides an API reference, grouped by function, describing how to use the Console Connect REST API.\nProducts available through the Console Connect API include:\n* [Ports](#tag/Ports) - A port allows customers to access multiple on-demand Console Connect services, including access to cloud services, geographically separate networks (such as remote or branch offices) and the Internet, via a single network connection. \n* [L2 Connections](#tag/L2-Connections) - Console Connect's point-to-point Layer 2 connection is a secured virtual private Ethernet service, transported via a fully redundant Multi-Protocol Label Switching (MPLS) enabled IP infrastructure provided by Console Connect.\n* [Internet On-Demand (IO-D)](#tag/Internet-On-Demand-(IO-D)) - The IO-D service is carried on a fully redundant dual-stack global IP network, providing business-grade internet connectivity for enterprises and service providers.\n* [CloudRouter](#tag/CloudRouter) - CloudRouter is an MPLS VPN IP based infrastructure service which provides a private Layer 3 meshed network between multiple locations and network endpoints globally for enterprises and service providers.", + "title": "Console Connect API", + "version": "1.59.2", + "license": { + "name": "Commercial", + "url": "https://www.consoleconnect.com/terms-of-use" + }, + "termsOfService": "https://www.consoleconnect.com/terms-of-use", + "x-logo": { + "url": "https://storage.googleapis.com/console-connect-static-assets/cc-api-logo.jpg", + "altText": "Console Connect logo" + }, + "contact": { + "name": "Console Connect Support", + "email": "support@consoleconnect.com" + } + }, + "servers": [ + { + "url": "https://api.consoleconnect.com" + } + ], + "paths": { + "/app-user/{companyId}/agreements": { + "get": { + "parameters": [ + { + "description": "The ObjectId of your company.", + "in": "path", + "name": "companyId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": [ + { + "id": "507f1f77bcf86cd799439011", + "version": "1.0,", + "date": "2022-08-24T05:10:59.418Z", + "type": "CONSOLE_PORT_SERVICE_TERMS", + "companyId": "507f191e810c19729de860ea" + } + ] + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Agreements"], + "description": "Get the agreements your company has agreed to.", + "summary": "Get Agreements", + "operationId": "GetAgreements" + } + }, + "/api/search": { + "get": { + "parameters": [ + { + "description": "The search string (username, name, location, bio, etc).", + "example": "consoleconnect", + "in": "query", + "name": "q", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "One or more types of object to search for:\n* `everything`\n* `people`\n* `companies`\n* `dataCenterFacilities`\n* `directConnectPartner`\n\nMultiple `type` parameters may be provided to search for two or more object types.", + "example": "everything", + "in": "query", + "name": "type", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The page number to get.", + "example": 1, + "in": "query", + "name": "page", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "The number of results per page to get.", + "example": 12, + "in": "query", + "name": "count", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "Sort Users, Companies, and DCFs by newest.", + "example": true, + "in": "query", + "name": "newest", + "schema": { + "type": "boolean" + } + }, + { + "description": "One or more userIds to search for Users, Companies, and DCFs by multiple `userId` parameters may be provided to search for two or more users.", + "example": "235014958511023495968818", + "in": "query", + "name": "userId", + "schema": { + "type": "string" + } + }, + { + "description": "One or more tags to search for.", + "example": "sales", + "in": "query", + "name": "tag", + "schema": { + "type": "string" + } + }, + { + "description": "Start time for filtering events.", + "example": "2015-10-07T22:37:51.732Z", + "in": "query", + "name": "startTime", + "schema": { + "type": "string" + } + }, + { + "description": "End time for filtering events.", + "example": "2015-10-07T22:37:51.732Z", + "in": "query", + "name": "endTime", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "example": { + "results": [ + { + "title": "Frederic Citizen", + "type": "user", + "description": "", + "isFollowing": false, + "isCompanyFollowing": { + "corl": false + }, + "data": { + "id": "5552a04804972e1f16dcc0d6", + "type": "PERSON", + "name": "Stan Sample", + "avatar": null, + "headline": null, + "summary": null, + "location": null, + "username": "stan_sample", + "social": null, + "groups": null, + "updatedAt": "2015-06-22T06:02:42.075Z", + "createdAt": "2015-05-13T00:52:24.721Z" + } + } + ], + "items": { + "users": [ + { + "id": "56159ebe6c11fef4510bfdc7", + "name": "Frederic Citizen", + "avatar": null, + "background": null, + "headline": "I <3 Networks", + "summary": "IP Engineer", + "location": "Mt Example, TX", + "username": "fredcit", + "social": null, + "tags": ["#baseball", "#football"], + "updatedAt": "2015-10-07T22:37:51.732Z", + "createdAt": "2015-10-07T22:37:50.543Z", + "companies": [ + { + "id": "56159ebf6c11fef4510bfdcc", + "name": "ExCo LLC", + "avatar": null, + "background": null, + "headline": null, + "summary": null, + "location": null, + "username": "exco", + "followers": ["56159ebe6c11fef4510bfdc7"], + "following": null, + "tags": [], + "verified": true, + "company": { + "website": null, + "industry": null, + "businessType": null, + "companySize": null, + "dateFounded": null, + "markets": {}, + "asns": null, + "regionalInternetRegistry": null, + "clientId": null, + "first": null, + "last": null, + "address": null, + "city": null, + "state": null, + "zip": null, + "addresses": null, + "phone": null, + "fax": null, + "email": null, + "country": null + }, + "linkUserCompany": {} + } + ], + "linkUserCompany": { + "56159ebf6c11fef4510bfdcc": { + "id": "56159ebf6c11fef4510bfdcd", + "userId": "56159ebe6c11fef4510bfdc7", + "companyId": "56159ebf6c11fef4510bfdcc", + "state": "ACTIVE", + "roles": ["ADMIN"], + "updatedAt": "2015-10-07T22:37:51.225Z", + "createdAt": "2015-10-07T22:37:51.225Z", + "deleted": false, + "deletedAt": "1970-01-01T00:00:00.000Z", + "permissions": { + "groups": { + "ADMIN": { + "user-moderation": true, + "company-actions": true, + "company-update": true, + "ports-edit": true, + "ports-read": true, + "connection-create": true, + "connection-modify": true, + "connection-read": true, + "connection-delete": true, + "order-query": true, + "order-create": true, + "order-modify": true, + "order-delete": true + } + } + } + } + }, + "stats": { + "followers": 0, + "interconnections": 0, + "posts": 1, + "events": 1, + "following": 1 + }, + "isFollowing": false, + "isCompanyFollowing": {} + } + ], + "companies": [], + "dataCenterFacilities": [] + } + } + } + } + } + }, + "tags": ["Search"], + "description": "> **This endpoint is deprecated. Please use specialized search endpoints outlined in other sections of the documentation.**\n\nAn api for searching multiple entities on our platform. While this particular endpoint is convenient for finding multiple types of entities, we highly recommend using more granular search apis listed in the Users, Companies, and DCF sections.", + "operationId": "legacy-search", + "summary": "Search Users, Companies, and DCFs" + } + }, + "/api/pricing/calculate": { + "post": { + "requestBody": { + "description": "", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ports": { + "description": "List of ports to get pricing for.", + "type": "array", + "items": { + "type": "object", + "properties": { + "dcf": { + "type": "string", + "description": "The ID of the DCF the port will be located in.\n\nSee [List DCFs API](#tag/Data-Center-Facilities-(DCFs)/operation/getDcfs)" + }, + "speed": { + "type": "number", + "description": "The required speed of the port in Mbps, e.g., 1000 = 1000Mbps or 1Gbps, 10000 = 10Gbps", + "example": 1000 + }, + "durationUnit": { + "type": "string", + "description": "Set to `m` if the Data Center accepts month-to-month port orders.", + "default": "y", + "enum": ["y", "m"] + } + }, + "required": ["dcf", "speed"] + } + }, + "connections": { + "description": "List of layer 2 connections to get pricing for.", + "type": "array", + "items": { + "type": "object", + "properties": { + "bandwidth": { + "type": "number", + "description": "The required bandwidth of the connection in Mbps, e.g., 30 = 30Mbps, 100 = 100Mbps, 1000 = 1Gbps" + }, + "classOfService": { + "type": "string", + "enum": ["GOLD", "SILVER", "BRONZE"], + "description": "The class of service." + }, + "duration": { + "allOf": [ + { + "$ref": "#/components/schemas/Duration" + }, + { + "description": "Specify duration information." + }, + { + "required": ["value", "unit"] + } + ] + }, + "srcDcf": { + "type": "string", + "description": "The ID of the source (A-end) Data Center Facility.\n\nSee [List DCFs API](#tag/Data-Center-Facilities-(DCFs)/operation/getDcfs)" + }, + "srcRegion": { + "type": "string", + "description": "The ID of the source (A-end) region. (Optional)" + }, + "destDcf": { + "type": "string", + "description": "The ID of the destination/ (Z-end) Data Center Facility.\n\nSee [List DCFs API](#tag/Data-Center-Facilities-(DCFs)/operation/getDcfs)" + }, + "destRegion": { + "type": "string", + "description": "The ID of the region of the destination (Z-end) region. (Optional)" + } + }, + "required": [ + "bandwidth", + "classOfService", + "duration", + "srcDcf", + "destDcf" + ] + } + }, + "discountCode": { + "type": "string", + "description": "Apply promotion or partner code." + }, + "includeCrossConnect": { + "type": "boolean", + "description": "Set to `true` to have the Cross Connect add-on with your port if your DCF supports this.\nOnly available in a 12 month contract." + } + } + }, + "examples": { + "Single-Port": { + "summary": "Single Port with 1,000 Mbps for 12 months", + "value": { + "ports": [ + { + "dcf": "5a8ba9118195000012e9f141", + "speed": 1000, + "durationUnit": "y" + } + ] + } + }, + "Single-Port-with-Cross-Connect": { + "summary": "Single Port with 1,000 Mbps and Cross Connect Add-on for 12 months", + "value": { + "ports": [ + { + "dcf": "5a8ba9118195000012e9f141", + "speed": 1000, + "durationUnit": "y" + } + ], + "includeCrossConnect": true + } + }, + "Single-Port-with-Discount": { + "summary": "Single Port with 1,000 Mbps and Discount for 12 months", + "value": { + "ports": [ + { + "dcf": "5a8ba9118195000012e9f141", + "speed": 1000, + "durationUnit": "y" + } + ], + "discountCode": "DISCOUNTDEMO" + } + }, + "Multiple-Ports": { + "summary": "Multiple Ports", + "value": { + "ports": [ + { + "dcf": "5a8ba9118195000012e9f141", + "speed": 10000, + "durationUnit": "y" + }, + { + "dcf": "a91112e9f1ba91181950ba91", + "speed": 1000, + "durationUnit": "m" + } + ] + } + }, + "Single-Connection": { + "summary": "Single Connection with 20 Mbps bandwidth for 1 month", + "value": { + "connections": [ + { + "bandwidth": 20, + "classOfService": "SILVER", + "duration": { + "value": 1, + "unit": "m" + }, + "srcDcf": "5a8a4838af6c690012871666", + "destDcf": "5a9739ccfae7ba00134d378b" + } + ] + } + }, + "Single-Connection-with-Discount": { + "summary": "Single Connection with 50 Mbps bandwidth and Discount for 12 months", + "value": { + "connections": [ + { + "bandwidth": 50, + "classOfService": "GOLD", + "duration": { + "value": 12, + "unit": "m" + }, + "srcDcf": "5a8a4838af6c690012871666", + "destDcf": "5a9739ccfae7ba00134d378b" + } + ], + "discountCode": "DISCOUNTDEMO" + } + }, + "Multiple-Connections": { + "summary": "Multiple Connections", + "value": { + "connections": [ + { + "bandwidth": 20, + "classOfService": "SILVER", + "duration": { + "value": 1, + "unit": "w" + }, + "srcDcf": "5a8a4838af6c690012871666", + "destDcf": "5a9739ccfae7ba00134d378b" + }, + { + "bandwidth": 20, + "classOfService": "SILVER", + "duration": { + "value": 1, + "unit": "m" + }, + "srcDcf": "5a8a4838af6c690012871666", + "destDcf": "5a9739ccfae7ba00134d378b" + } + ] + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PortsConnectionsResponse" + }, + "examples": { + "Single-Port": { + "summary": "Single Port with 1,000 Mbps for 12 months", + "value": { + "results": [ + { + "type": "PORT", + "entity": { + "dcf": { + "id": "5a8ba9118195000012e9f141", + "name": "Company A", + "popId": null, + "regionIds": null, + "metroIds": null, + "tags": null + }, + "speed": 1000, + "discountId": "", + "durationUnit": "y" + }, + "price": 300, + "preAuthAmount": 300, + "amountSaved": null, + "amountSavedTotal": null, + "basicTotalAmount": null, + "basicMonthlyAmount": null, + "priceCalculatorAttributes": { + "discountIds": [], + "discounts": [] + } + } + ] + } + }, + "Single-Port-with-Cross-Connect": { + "summary": "Single Port with 1,000 Mbps and Cross Connect Add-on for 12 months", + "value": { + "results": [ + { + "type": "PORT", + "entity": { + "dcf": { + "id": "5a8ba9118195000012e9f141", + "name": "Company A", + "popId": null, + "regionIds": null, + "metroIds": null, + "tags": null + }, + "speed": 1000, + "discountId": "", + "durationUnit": "y" + }, + "price": 300, + "preAuthAmount": 300, + "amountSaved": null, + "amountSavedTotal": null, + "basicTotalAmount": null, + "basicMonthlyAmount": null, + "priceCalculatorAttributes": { + "discountIds": [], + "discounts": [] + }, + "crossConnectAmount": 65 + } + ] + } + }, + "Single-Port-with-Discount": { + "summary": "Single Port with 1,000 Mbps and Discount for 12 months", + "value": { + "results": [ + { + "type": "PORT", + "entity": { + "dcf": { + "id": "5a8ba9118195000012e9f141", + "name": "Company A", + "popId": null, + "regionIds": null, + "metroIds": null, + "tags": null + }, + "speed": 1000, + "discountId": "66c2a7ec914c31947866412b", + "durationUnit": "y" + }, + "price": 90, + "preAuthAmount": 90, + "amountSaved": 210, + "amountSavedTotal": null, + "basicTotalAmount": null, + "basicMonthlyAmount": null, + "priceCalculatorAttributes": { + "discountIds": [], + "discounts": [] + }, + "discount": { + "discountType": "percentage", + "marketingCode": "DISCOUNTDEMO", + "duration": "recurring", + "applicableProducts": [], + "applicableDcfs": [], + "applicableMetros": [], + "purchasingCompanies": [], + "destinationCompanies": [], + "value": 70, + "tierType": "none", + "tiers": [], + "id": "66c2a7ec914c31947866412b", + "deletedAt": null, + "createdAt": "2024-08-19T02:03:24.851Z", + "updatedAt": "2024-08-20T00:05:43.690Z", + "name": "Get 70% off", + "description": "70% Discount", + "tags": [] + } + } + ] + } + }, + "Multiple-Ports": { + "summary": "Multiple Ports", + "value": { + "results": [ + { + "type": "PORT", + "entity": { + "dcf": { + "id": "5a8ba9118195000012e9f141", + "name": "Company A", + "popId": null, + "regionIds": null, + "metroIds": null, + "tags": null + }, + "speed": 10000, + "discountId": "", + "durationUnit": "y" + }, + "price": 400, + "preAuthAmount": 400, + "amountSaved": null, + "amountSavedTotal": null, + "basicTotalAmount": null, + "basicMonthlyAmount": null, + "priceCalculatorAttributes": { + "discountIds": [], + "discounts": [] + } + }, + { + "type": "PORT", + "entity": { + "dcf": { + "id": "a91112e9f1ba91181950ba91", + "name": "Company B", + "popId": null, + "regionIds": null, + "metroIds": null, + "tags": null + }, + "speed": 1000, + "discountId": "", + "durationUnit": "m" + }, + "price": 450, + "preAuthAmount": 450, + "amountSaved": null, + "amountSavedTotal": null, + "basicTotalAmount": null, + "basicMonthlyAmount": null + } + ] + } + }, + "Single-Connection": { + "summary": "Single Connection with 20 Mbps bandwidth for 1 month", + "value": { + "results": [ + { + "type": "CONNECTION", + "entity": { + "srcDcf": { + "id": "5a8a4838af6c690012871666", + "name": "Company A", + "popId": null, + "regionIds": null, + "metroIds": null, + "tags": null + }, + "destDcf": { + "id": "5a9739ccfae7ba00134d378b", + "name": "Company B", + "popId": null, + "regionIds": null, + "metroIds": null, + "tags": null + }, + "duration": { + "from": null, + "to": null, + "unit": "m", + "value": 1 + }, + "bandwidth": 20, + "classOfService": "SILVER", + "discountId": "" + }, + "price": 80, + "preAuthAmount": 80, + "amountSaved": null, + "amountSavedTotal": null, + "basicTotalAmount": 80, + "basicMonthlyAmount": 80, + "formula": "(bandwidthCost*multiplier)*duration/(1-margin)+portFee", + "factors": [ + { + "name": "margin", + "number": 0, + "ref": null + }, + { + "name": "portFee", + "number": 0, + "ref": null + }, + { + "name": "nniFee", + "number": 0, + "ref": null + }, + { + "name": "bandwidthCost", + "number": 80, + "ref": { + "from": { + "id": "5ce379fc628923000a4fbe3b", + "name": "EUROPE/UK", + "regionIds": ["5a370b288f220300127f834d"] + }, + "to": { + "id": "5ce379fc628923000a4fbe3b", + "name": "EUROPE/UK", + "regionIds": ["5a370b288f220300127f834d"] + }, + "price": { + "price": 1.75, + "bandwidth": { + "from": 1, + "to": 100 + }, + "cos": "SILVER" + } + } + }, + { + "name": "multiplier", + "number": 1, + "ref": null + }, + { + "name": "duration", + "number": 1, + "ref": null + } + ], + "priceCalculatorAttributes": { + "discountIds": [], + "discounts": [] + } + } + ] + } + }, + "Single-Connection-with-Discount": { + "summary": "Single Connection with 50 Mbps bandwidth and Discount for 12 months", + "value": { + "results": [ + { + "type": "CONNECTION", + "entity": { + "srcDcf": { + "id": "5a8a4838af6c690012871666", + "name": "Company A", + "popId": null, + "regionIds": null, + "metroIds": null, + "tags": null + }, + "destDcf": { + "id": "5a9739ccfae7ba00134d378b", + "name": "Company B", + "popId": null, + "regionIds": null, + "metroIds": null, + "tags": null + }, + "duration": { + "from": null, + "to": null, + "unit": "m", + "value": 12 + }, + "bandwidth": 50, + "classOfService": "GOLD", + "discountId": "66c2a7ec914c31947866412b" + }, + "price": 279.36, + "preAuthAmount": 23.28, + "amountSaved": 54.32, + "amountSavedTotal": 651.84, + "basicTotalAmount": 279.36, + "basicMonthlyAmount": 23.28, + "formula": "(bandwidthCost*multiplier)*duration/(1-margin)+portFee", + "factors": [ + { + "name": "margin", + "number": 0, + "ref": null + }, + { + "name": "portFee", + "number": 0, + "ref": null + }, + { + "name": "nniFee", + "number": 0, + "ref": null + }, + { + "name": "bandwidthCost", + "number": 80, + "ref": { + "from": { + "id": "5ce379fc628923000a4fbe3b", + "name": "EUROPE/UK", + "regionIds": ["5a370b288f220300127f834d"] + }, + "to": { + "id": "5ce379fc628923000a4fbe3b", + "name": "EUROPE/UK", + "regionIds": ["5a370b288f220300127f834d"] + }, + "price": { + "price": 3.23, + "bandwidth": { + "from": 1, + "to": 100 + }, + "cos": "GOLD" + } + } + }, + { + "name": "multiplier", + "number": 0.97, + "ref": null + }, + { + "name": "duration", + "number": 12, + "ref": null + } + ], + "priceCalculatorAttributes": { + "discountIds": [], + "discounts": [] + }, + "discount": { + "discountType": "percentage", + "marketingCode": "DISCOUNTDEMO", + "duration": "recurring", + "applicableProducts": [], + "applicableDcfs": [], + "applicableMetros": [], + "purchasingCompanies": [], + "destinationCompanies": [], + "value": 70, + "tierType": "none", + "tiers": [], + "id": "66c2a7ec914c31947866412b", + "deletedAt": null, + "createdAt": "2024-08-19T02:03:24.851Z", + "updatedAt": "2024-08-20T00:05:43.690Z", + "name": "Get 70% off", + "description": "70% Discount", + "tags": [] + } + } + ] + } + }, + "Multiple-Connections": { + "summary": "Multiple Connections", + "value": { + "results": [ + { + "type": "CONNECTION", + "entity": { + "srcDcf": { + "id": "5a8a4838af6c690012871666", + "name": "Company A", + "popId": null, + "regionIds": null, + "metroIds": null, + "tags": null + }, + "destDcf": { + "id": "5a9739ccfae7ba00134d378b", + "name": "Company B", + "popId": null, + "regionIds": null, + "metroIds": null, + "tags": null + }, + "duration": { + "from": null, + "to": null, + "unit": "w", + "value": 1 + }, + "bandwidth": 20, + "classOfService": "SILVER", + "discountId": "" + }, + "price": 28.8, + "preAuthAmount": 28.8, + "amountSaved": null, + "amountSavedTotal": null, + "basicTotalAmount": 28.8, + "basicMonthlyAmount": 28.8, + "formula": "(bandwidthCost*multiplier)*duration/(1-margin)+portFee", + "factors": [ + { + "name": "margin", + "number": 0, + "ref": null + }, + { + "name": "portFee", + "number": 0, + "ref": null + }, + { + "name": "nniFee", + "number": 0, + "ref": null + }, + { + "name": "bandwidthCost", + "number": 80, + "ref": { + "from": { + "id": "5ce379fc628923000a4fbe3b", + "name": "EUROPE/UK", + "regionIds": ["5a370b288f220300127f834d"] + }, + "to": { + "id": "5ce379fc628923000a4fbe3b", + "name": "EUROPE/UK", + "regionIds": ["5a370b288f220300127f834d"] + }, + "price": { + "price": 1.75, + "bandwidth": { + "from": 1, + "to": 100 + }, + "cos": "SILVER" + } + } + }, + { + "name": "multiplier", + "number": 0.36, + "ref": null + }, + { + "name": "duration", + "number": 1, + "ref": null + } + ], + "priceCalculatorAttributes": { + "discountIds": [], + "discounts": [] + } + }, + { + "type": "CONNECTION", + "entity": { + "srcDcf": { + "id": "5a8a4838af6c690012871666", + "name": "Company A", + "popId": null, + "regionIds": null, + "metroIds": null, + "tags": null + }, + "destDcf": { + "id": "5a9739ccfae7ba00134d378b", + "name": "Company B", + "popId": null, + "regionIds": null, + "metroIds": null, + "tags": null + }, + "duration": { + "from": null, + "to": null, + "unit": "m", + "value": 1 + }, + "bandwidth": 20, + "classOfService": "SILVER", + "discountId": "" + }, + "price": 80, + "preAuthAmount": 80, + "amountSaved": null, + "amountSavedTotal": null, + "basicTotalAmount": 80, + "basicMonthlyAmount": 80, + "formula": "(bandwidthCost*multiplier)*duration/(1-margin)+portFee", + "factors": [ + { + "name": "margin", + "number": 0, + "ref": null + }, + { + "name": "portFee", + "number": 0, + "ref": null + }, + { + "name": "nniFee", + "number": 0, + "ref": null + }, + { + "name": "bandwidthCost", + "number": 80, + "ref": { + "from": { + "id": "5ce379fc628923000a4fbe3b", + "name": "EUROPE/UK", + "regionIds": ["5a370b288f220300127f834d"] + }, + "to": { + "id": "5ce379fc628923000a4fbe3b", + "name": "EUROPE/UK", + "regionIds": ["5a370b288f220300127f834d"] + }, + "price": { + "price": 1.75, + "bandwidth": { + "from": 1, + "to": 100 + }, + "cos": "SILVER" + } + } + }, + { + "name": "multiplier", + "number": 1, + "ref": null + }, + { + "name": "duration", + "number": 1, + "ref": null + } + ] + } + ] + } + } + } + } + } + }, + "204": { + "description": "No price was found for this combination.", + "headers": {}, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "response": { + "value": { + "code": 204, + "message": "No Content" + } + } + } + } + } + }, + "400": { + "description": "error", + "headers": {}, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "invalid-dcf": { + "summary": "invalid dcf", + "value": { + "code": 400, + "message": "Invalid dcf property. This value should be the dcf ID." + } + }, + "invalid-srcDcf": { + "summary": "invalid srcDcf", + "value": { + "code": 400, + "message": "Invalid srcDcf property. This value should be the srcDcf ID." + } + }, + "invalid-discount-code": { + "summary": "invalid discount code", + "value": { + "code": 400, + "message": "INVALID CODE" + } + } + } + } + } + } + }, + "tags": ["Pricing"], + "description": "Calculate pricing for Ports and Layer 2 Connections", + "operationId": "calculate-price-for-ports-and-connections", + "summary": "Ports and Connections" + } + }, + "/api/company/{username}/pricing/calculate/flex": { + "post": { + "parameters": [ + { + "in": "path", + "name": "username", + "description": "The username of the company.", + "example": "company_co", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "connectionId": { + "type": "string", + "description": "The connection ID of the connection you want to get flex pricing for." + }, + "flexBandwidth": { + "type": "string", + "description": "The additional bandwidth to be added to the connection." + }, + "discountCode": { + "type": "string", + "description": "Any discount code you may have been provided." + } + }, + "required": ["connectionId", "flexBandwidth"] + }, + "examples": { + "Without-Discount": { + "summary": "Without Discount", + "value": { + "connectionId": "95908593icTTl895393135Y7K", + "flexBandwidth": "100" + } + }, + "With-Discount-Code": { + "summary": "With Discount Code", + "value": { + "connectionId": "95908593icTTl895393135Y7K", + "flexBandwidth": "100", + "discountCode": "FIRSTCONNECTION" + } + } + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "connectionId": { + "type": "string", + "description": "The connection ID of the connection you want to get flex pricing for." + }, + "flexBandwidth": { + "type": "number", + "description": "" + }, + "flexCharge": { + "type": "number", + "description": "The additional charge for flexing the connection by the stated amount." + } + } + }, + "examples": { + "response": { + "value": { + "connectionId": "95908593icTTl895393135Y7K", + "flexBandwidth": 100, + "flexCharge": 97 + } + } + } + } + }, + "description": "OK", + "headers": {} + }, + "204": { + "description": "No price was found for this combination." + }, + "400": { + "description": "error", + "headers": {}, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "missing-parameter": { + "summary": "missing parameter", + "value": { + "code": 400, + "message": "flex price calculate payload must have a connectionId" + } + }, + "invalid-discount-code": { + "summary": "invalid discount code", + "value": { + "code": 400, + "message": "Invalid Code" + } + } + } + } + } + } + }, + "tags": ["Pricing"], + "description": "Retrieve flex pricing for a connection.", + "operationId": "connection-flex-price-calculate", + "summary": "Connections - Flex pricing" + } + }, + "/v2/pricing/gia/byCompanyAndPort": { + "get": { + "parameters": [ + { + "description": "The ID of the Company.", + "example": "507f1f77bcf86cd799439011", + "in": "query", + "name": "companyId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the Port.", + "example": "507f191e810c19729de860ea", + "in": "query", + "name": "portId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The desired bandwidth for the GIA service in Mbps.", + "example": "10", + "in": "query", + "name": "bandwidth", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The duration the service was ordered for.", + "example": "12", + "in": "query", + "name": "durationValue", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "A unit of time such as days, weeks, months, and years. Value can be one of: d, w, m, y.", + "example": "m", + "in": "query", + "name": "durationUnit", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "description": "Optional discount code.", + "name": "discountCode", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/GiaPricing-Recurring" + }, + { + "$ref": "#/components/schemas/GiaPricing-OneOff" + }, + { + "$ref": "#/components/schemas/GiaPricing-NoPrice" + } + ] + }, + "examples": { + "prices-with-duration-greater-than-one-month": { + "summary": "prices with a duration greater than one month", + "value": { + "contractTotals": { + "giaCost": 3420, + "ipCosts": { + "ipv426Cost": 1596, + "ipv427Cost": 1140, + "ipv428Cost": 0, + "ipv429Cost": null, + "ipv430Cost": null + } + }, + "unitCosts": { + "giaCost": 142.5, + "ipCosts": { + "ipv426Cost": 66.5, + "ipv427Cost": 47.5, + "ipv428Cost": 0, + "ipv429Cost": null, + "ipv430Cost": null + } + }, + "contractTotalsAmountSaved": null, + "unitCostsAmountSaved": null, + "burstRate": 0.04681165489, + "duration": { + "unit": "m", + "value": 24 + } + } + }, + "prices-with-duration-less-than-one-month": { + "summary": "prices with duration less than one month", + "value": { + "onceOff": { + "giaCost": 73.97, + "ipCosts": { + "ipv426Cost": 34.52, + "ipv427Cost": 24.66, + "ipv428Cost": 0, + "ipv429Cost": null, + "ipv430Cost": null + } + }, + "burstRate": 0.004050035038912062, + "duration": { + "unit": "d", + "value": 6 + } + } + }, + "no-price": { + "summary": "no price", + "value": { + "message": "No prices are available for GIA in the specified Port's Metro" + } + } + } + } + }, + "description": "OK", + "headers": {} + }, + "400": { + "description": "Validation errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "company-required": { + "summary": "company required", + "value": { + "error": { + "code": 400, + "message": "companyId is a required argument" + } + } + }, + "invalid-bandwidth": { + "summary": "invalid bandwidth", + "value": { + "error": { + "code": 400, + "message": "Value is not a number." + } + } + }, + "bandwidth-must-be-a-positive-number": { + "summary": "bandwidth must be a positive number", + "value": { + "error": { + "code": 400, + "message": "Port bandwidth must be a positive integer in Mbps." + } + } + }, + "duration-must-be-valid": { + "summary": "duration must be valid", + "value": { + "error": { + "code": 400, + "message": "Value is not a number." + } + } + }, + "duration-must-be-a-positive-number": { + "summary": "duration must be a positive number", + "value": { + "error": { + "code": 400, + "message": "2.1 is not a positive integer. Duration quantity must be a positive integer" + } + } + }, + "durationUnit-must-be-valid-unit": { + "summary": "durationUnit must be a valid unit", + "value": { + "error": { + "code": 400, + "message": "x is not a valid duration unit. Valid units are: \"d\", \"w\", \"m\", \"y\"" + } + } + }, + "bandwidth-too-large": { + "summary": "bandwidth too large", + "value": { + "error": { + "code": 400, + "message": "The requested bandwidth exceeds the available capacity for the Port. Max is: 10" + } + } + }, + "unsupported-port": { + "summary": "unsupported port", + "value": { + "error": { + "code": 400, + "message": "Internet on demand is not available on port with ID 507f191e810c19729de860ea . Please select another port or contact support@consoleconnect.com if you want Internet on demand at this location." + } + } + }, + "invalid-request": { + "summary": "invalid request", + "value": { + "error": { + "code": 400, + "message": "Invalid request for GIA pricing" + } + } + } + } + } + } + }, + "404": { + "description": "entity not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "company-not-found": { + "summary": "company not found", + "value": { + "error": { + "code": 404, + "message": "A company can not be found with the given id" + } + } + }, + "port-not-found": { + "summary": "port not found", + "value": { + "error": { + "code": 404, + "message": "A port can not be found with the given id" + } + } + }, + "unavailable": { + "summary": "unavailable", + "value": { + "error": { + "code": 404, + "message": "Gia service is turned off now." + } + } + } + } + } + } + } + }, + "tags": ["Pricing"], + "description": "Get Internet On-Demand pricing by company and port.\n* **GIA Pricing Recurring** - Applicable charges for IO-D with service duration of *more* than a month.\n* **GIA Pricing OneOff** - Applicable charges for IO-D with service duration of *less* than a month.", + "operationId": "iod-pricing-by-company-and-port", + "summary": "Internet On-Demand - Company and Port" + } + }, + "/v2/pricing/gia/byDcf": { + "get": { + "parameters": [ + { + "description": "The ID of the Data Center Facility.", + "example": "507f191e810c19729de860ea", + "in": "query", + "name": "dcfId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The desired bandwidth for the GIA Service in Mbps.", + "example": "10", + "in": "query", + "name": "bandwidth", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The duration the service was ordered for.", + "example": "12", + "in": "query", + "name": "durationValue", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "A unit of time such as days, weeks, months, and years. Value can be one of: d, w, m, y.", + "example": "m", + "in": "query", + "name": "durationUnit", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "description": "Optional discount code.", + "name": "discountCode", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "description": "The ID of the Company.", + "example": "507f1f77bcf86cd799439011", + "name": "companyId", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/GiaPricing-OneOff" + }, + { + "$ref": "#/components/schemas/GiaPricing-Recurring" + }, + { + "$ref": "#/components/schemas/GiaPricing-NoPrice" + } + ] + }, + "examples": { + "prices-with-duration-greater-than-one-month": { + "summary": "prices with a duration greater than one month", + "value": { + "contractTotals": { + "giaCost": 3420, + "ipCosts": { + "ipv426Cost": 1596, + "ipv427Cost": 1140, + "ipv428Cost": 0, + "ipv429Cost": null, + "ipv430Cost": null + } + }, + "unitCosts": { + "giaCost": 142.5, + "ipCosts": { + "ipv426Cost": 66.5, + "ipv427Cost": 47.5, + "ipv428Cost": 0, + "ipv429Cost": null, + "ipv430Cost": null + } + }, + "contractTotalsAmountSaved": null, + "unitCostsAmountSaved": null, + "burstRate": 0.04681165489, + "duration": { + "unit": "m", + "value": 24 + } + } + }, + "prices-with-duration-less-than-one-month": { + "summary": "prices with duration less than one month", + "value": { + "onceOff": { + "giaCost": 73.97, + "ipCosts": { + "ipv426Cost": 34.52, + "ipv427Cost": 24.66, + "ipv428Cost": 0, + "ipv429Cost": null, + "ipv430Cost": null + } + }, + "burstRate": 0.004050035038912062, + "duration": { + "unit": "d", + "value": 6 + } + } + }, + "no-prices": { + "summary": "no prices", + "value": { + "message": "No prices are available for GIA in the specified Port's Metro" + } + } + } + } + }, + "description": "OK", + "headers": {} + }, + "400": { + "description": "Validation errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "company-required": { + "summary": "company required", + "value": { + "error": { + "code": 400, + "message": "dcfId is a required argument" + } + } + }, + "invalid-bandwidth": { + "summary": "invalid bandwidth", + "value": { + "error": { + "code": 400, + "message": "Value is not a number." + } + } + }, + "bandwidth-must-be-a-positive-number": { + "summary": "bandwidth must be a positive number", + "value": { + "error": { + "code": 400, + "message": "Port bandwidth must be a positive integer in Mbps." + } + } + }, + "duration-must-be-valid": { + "summary": "duration must be valid", + "value": { + "error": { + "code": 400, + "message": "Value is not a number." + } + } + }, + "duration-must-be-a-positive-number": { + "summary": "duration must be a positive number", + "value": { + "error": { + "code": 400, + "message": "2.1 is not a positive integer. Duration quantity must be a positive integer" + } + } + }, + "durationUnit-must-be-valid-unit": { + "summary": "durationUnit must be a valid unit", + "value": { + "error": { + "code": 400, + "message": "x is not a valid duration unit. Valid units are: \"d\", \"w\", \"m\", \"y\"" + } + } + }, + "invalid-request": { + "summary": "invalid request", + "value": { + "error": { + "code": 400, + "message": "Invalid request for GIA pricing" + } + } + } + } + } + } + }, + "404": { + "description": "entity not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "company-not-found": { + "summary": "company not found", + "value": { + "error": { + "code": 404, + "message": "A company can not be found with the given id" + } + } + }, + "dcf-not-found": { + "summary": "dcf not found", + "value": { + "error": { + "code": 404, + "message": "A data centre facility can not be found with the given id" + } + } + }, + "unavailable": { + "summary": "unavailable", + "value": { + "error": { + "code": 404, + "message": "Gia Service is turned off now." + } + } + } + } + } + } + } + }, + "tags": ["Pricing"], + "description": "Get Internet On-Demand price for a specific DCF\n* **GIA Pricing Recurring** - Applicable charges for IO-D with service duration of *more* than a month.\n* **GIA Pricing OneOff** - Applicable charges for IO-D with service duration of *less* than a month.\n> **Note:** An error will be returned if there was no pricing found for a service with the desired bandwidth. Please contact your BDM or Support if this happens.", + "operationId": "iod-pricing-by-DCF", + "summary": "Internet on Demand - DCF" + } + }, + "/v2/pricing/gia/bulkByDcf": { + "get": { + "parameters": [ + { + "description": "The ID of the Data Center Facility.", + "example": "507f191e810c19729de860ea", + "in": "query", + "name": "dcfId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "priceRequests", + "description": "An array of objects with the price request details as a JSON serialised string.", + "required": true, + "example": [ + { + "bandwidth": 10, + "durationValue": 2, + "durationUnit": "y" + }, + { + "bandwidth": 10, + "durationValue": 1, + "durationUnit": "y" + } + ], + "content": { + "application/json": { + "schema": { + "type": "array", + "description": "", + "items": { + "type": "object", + "properties": { + "bandwidth": { + "type": "number", + "description": "" + }, + "durationValue": { + "type": "number", + "description": "" + }, + "durationUnit": { + "type": "string", + "description": "" + } + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/GiaPricing-Recurring" + }, + { + "$ref": "#/components/schemas/GiaPricing-OneOff" + }, + { + "$ref": "#/components/schemas/GiaPricing-NoPrice" + } + ] + } + }, + "examples": { + "mixed-response": { + "summary": "mixed response", + "value": [ + { + "contractTotals": { + "giaCost": 3420, + "ipCosts": { + "ipv426Cost": 1596, + "ipv427Cost": 1140, + "ipv428Cost": 0, + "ipv429Cost": null, + "ipv430Cost": null + } + }, + "unitCosts": { + "giaCost": 142.5, + "ipCosts": { + "ipv426Cost": 66.5, + "ipv427Cost": 47.5, + "ipv428Cost": 0, + "ipv429Cost": null, + "ipv430Cost": null + } + }, + "contractTotalsAmountSaved": null, + "unitCostsAmountSaved": null, + "burstRate": 0.04681165489, + "duration": { + "unit": "m", + "value": 24 + } + }, + { + "onceOff": { + "giaCost": 73.97, + "ipCosts": { + "ipv426Cost": 34.52, + "ipv427Cost": 24.66, + "ipv428Cost": 0, + "ipv429Cost": null, + "ipv430Cost": null + } + }, + "burstRate": 0.004050035038912062, + "duration": { + "unit": "d", + "value": 6 + } + } + ] + } + } + } + } + }, + "404": { + "description": "entity not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "company-not-found": { + "summary": "company not found", + "value": { + "error": { + "code": 404, + "message": "A company can not be found with the given id" + } + } + }, + "unavailable": { + "summary": "unavailable", + "value": { + "error": { + "code": 404, + "message": "Gia Service is turned off now." + } + } + } + } + } + } + } + }, + "tags": ["Pricing"], + "description": "Get Internet On-Demand prices for multiple DCFs in a single call.\n* **GIA Pricing Recurring** - Applicable charges for IO-D with service duration of *more* than a month.\n* **GIA Pricing OneOff** - Applicable charges for IO-D with service duration of *less* than a month.", + "operationId": "iod-pricing-by-DCF-bulk", + "summary": "Internet On-Demand - DCF (bulk)" + } + }, + "/v2/pricing/flex-iod/{giaServiceId}": { + "get": { + "parameters": [ + { + "description": "The ID of the IoD service to flex.", + "example": "ae913a22-d9ae-4022-9016-edb58575e39b", + "in": "path", + "name": "giaServiceId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The desired bandwidth to flex the service to.", + "example": "10", + "in": "query", + "name": "bandwidth", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Optional discount code.", + "example": "20PERCENT", + "in": "query", + "name": "discountCode", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "flexCharge": { + "type": "number", + "description": "" + }, + "amountSaved": { + "type": "number" + } + }, + "example": { + "flexCharge": 42.4, + "amountSaved": 0 + } + } + } + } + }, + "404": { + "description": "Entity not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "response": { + "value": { + "error": { + "code": 422, + "message": "GiaService not found: ae913a22-d9ae-4022-9016-edb58575e39b" + } + } + } + } + } + } + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "response": { + "value": { + "error": { + "code": 422, + "message": "Flex price is not available for the requested bandwidth for this service" + } + } + } + } + } + }, + "description": "Unprocessable Entity\n\nNo Pricing is available for the service's metro.\n\nAn error will be returned if there was no pricing found for a flex to the desired bandwidth in this service's metro. If this happens, please contact your BDM or Support.", + "headers": {} + } + }, + "tags": ["Pricing"], + "description": "Retrieve flex pricing for Internet On-Demand services.", + "operationId": "iod-flex-pricing", + "summary": "Internet On-Demand - Flex" + } + }, + "/v2/pricing/l3vpn": { + "post": { + "requestBody": { + "description": "", + "required": true, + "content": { + "application/json": { + "example": { + "companyId": "66eb1831e49462a7c87e097e", + "bandwidth": "500MB", + "duration": { + "unit": "m", + "value": 6 + }, + "sites": [ + { + "priceRefId": "1", + "dcfId": "66eb183694742642e25edb64", + "rateLimit": { + "unit": "mbps", + "value": 100 + }, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "discountId": "" + } + ], + "discountCode": "" + }, + "schema": { + "type": "object", + "properties": { + "companyId": { + "type": "string", + "description": "The ID of the company. You can check your companyId in your account on ***[Console Connect](https://www.consoleconnect.com/)*** website or you can query in ***[Auth](#tag/Auth/operation/GetLoggedInUser)*** API\n" + }, + "bandwidth": { + "type": "string", + "description": "The desired bandwidth for the CloudRouter", + "enum": ["500MB", "1GB", "2.5GB", "5GB", "10GB", ">10GB"] + }, + "duration": { + "$ref": "#/components/schemas/Duration" + }, + "sites": { + "anyOf": [ + { + "$ref": "#/components/schemas/CloudRouterPriceCalcSiteStandard" + }, + { + "$ref": "#/components/schemas/CloudRouterPriceCalcSiteSIMPool" + } + ] + }, + "discountCode": { + "type": "string", + "description": "" + } + }, + "required": ["companyId", "bandwidth", "duration", "sites"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "baseL3vpnCost": { + "type": "number", + "description": "" + }, + "totalContractCost": { + "type": "number", + "description": "" + }, + "duration": { + "$ref": "#/components/schemas/Duration" + }, + "sites": { + "type": "array", + "items": { + "type": "object", + "properties": { + "hourlyCost": { + "type": "number" + }, + "dailyCost": { + "type": "number" + }, + "monthlyCost": { + "type": "number" + }, + "site": { + "$ref": "#/components/schemas/CloudRouterPriceCalcSiteStandard" + } + } + } + }, + "baseL3vpnCostAmountSaved": { + "type": "number", + "description": "" + }, + "totalContractCostAmountSaved": { + "type": "number", + "description": "" + }, + "discount": { + "$ref": "#/components/schemas/Discount" + } + } + }, + "examples": { + "price-on-application": { + "summary": "price on application", + "value": { + "totalContractCost": 1200, + "baseL3vpnCost": 200, + "duration": { + "from": null, + "to": null, + "unit": "m", + "value": 6 + }, + "sites": [ + { + "site": { + "portId": "66eb1a9d2778c42f179cdd7d", + "dcfId": "66eb183694742642e25edb64", + "discountId": "", + "rateLimit": { + "unit": "MBPS", + "value": 100 + }, + "providerInfo": { + "dcfName": "sampleDcfName", + "dcfId": "66eb183694742642e25edb64", + "metroId": "66eb19f1007415be57b333d1", + "city": "Tokyo", + "country": "JP", + "countryDisplayName": "Japan" + } + }, + "priceRefId": "1", + "prices": { + "BRONZE": { + "hourlyCost": 0, + "hourlyCostAmountSaved": null, + "dailyCost": 0, + "monthlyCost": 0 + }, + "SILVER": { + "hourlyCost": 0, + "hourlyCostAmountSaved": null, + "dailyCost": 0, + "monthlyCost": 0 + }, + "GOLD": { + "hourlyCost": 0, + "hourlyCostAmountSaved": null, + "dailyCost": 0, + "monthlyCost": 0 + } + } + } + ], + "baseL3vpnCostAmountSaved": null, + "totalContractCostAmountSaved": null, + "totalHourlySiteCostAmountSaved": 0, + "bandwidth": "500MB" + } + }, + "with-sites": { + "summary": "with sites", + "value": { + "baseL3vpnCost": 100, + "totalContractCost": 200, + "duration": { + "1": "m" + }, + "sites": [ + { + "site": null, + "dcfId": "63241b384a42ce7e676819eb", + "rateLimit": { + "unit": "mbps", + "value": 100 + }, + "providerInfo": { + "dcfName": "brisbaneDcf", + "dcfId": "63241b384a42ce7e676819eb", + "metroId": "63241b384a42ce7e676819e2", + "city": "Brisbane", + "country": "AUS" + }, + "priceRefId": 1, + "prices": { + "BRONZE": { + "hourlyCost": 0, + "dailyCost": 0, + "monthlyCost": 0 + }, + "SILVER": { + "hourlyCost": 0, + "dailyCost": 0, + "monthlyCost": 0 + }, + "GOLD": { + "hourlyCost": 0, + "dailyCost": 0, + "monthlyCost": 0 + } + } + } + ], + "bandwidth": "500MB" + } + }, + "with-sites-and-discount": { + "value": { + "summary": "with sites and discounts", + "baseL3vpnCost": 100, + "totalContractCost": 200, + "duration": { + "1": "m" + }, + "sites": [ + { + "site": null, + "dcfId": "63241b384a42ce7e676819eb", + "rateLimit": { + "unit": "mbps", + "value": 100 + }, + "providerInfo": { + "dcfName": "brisbaneDcf", + "dcfId": "63241b384a42ce7e676819eb", + "metroId": "63241b384a42ce7e676819e2", + "city": "Brisbane", + "country": "AUS" + }, + "priceRefId": 1, + "prices": { + "BRONZE": { + "hourlyCost": 0, + "dailyCost": 0, + "monthlyCost": 0 + }, + "SILVER": { + "hourlyCost": 0, + "dailyCost": 0, + "monthlyCost": 0 + }, + "GOLD": { + "hourlyCost": 0, + "dailyCost": 0, + "monthlyCost": 0 + } + } + } + ], + "bandwidth": "500MB", + "baseL3vpnCostAmountSaved": 20, + "totalContractCostAmountSaved": 120, + "discount": { + "discountType": "percentage", + "marketingCode": "L3VPNDISCOUNT", + "duration": "recurring", + "applicableProducts": ["L3VPN"], + "redemptions": 10, + "value": 10, + "tierType": "none", + "id": "6327e43d773e329b467f1ee4", + "deletedAt": null, + "createdAt": "2022-09-19T03:38:37.812Z", + "updatedAt": "2022-09-19T03:38:37.813Z" + } + } + }, + "without-sites": { + "summary": "without sites", + "value": { + "totalContractCost": null, + "baseL3vpnCost": null, + "duration": { + "unit": "m", + "value": 6 + }, + "sites": [], + "bandwidth": "500MB" + } + } + } + } + } + }, + "400": { + "description": "validations", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "bandwidth-required": { + "summary": "bandwidth required", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "bandwidth is a required argument" + } + } + }, + "bandwidth-invalid": { + "summary": "bandwidth invalid", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "Bandwidth must be one of (500MB,1GB,2.5GB,5GB,10GB,>10GB)" + } + } + }, + "duration-required": { + "summary": "duration required", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "duration is a required argument" + } + } + }, + "duration-invalid": { + "summary": "duration invalid", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "Duration should be in the format { unit: String, value: Number } where unit is one of \\\"m\\\" | \\\"y\\\" and value is a number greater than 0" + } + } + }, + "duration-unit-invalid": { + "summary": "duration unit invalid", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "d is not a valid duration unit. Valid units are: \\\"m\\\", \\\"y\\\"" + } + } + }, + "duration-value-must-be-positive": { + "summary": "duration value must be positive", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "-6 is not a positive integer. Duration value must be a positive integer" + } + } + }, + "duration-value-invalid": { + "summary": "duration value invalid", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "100 is not a valid quantity for duration unit: m. The maximum quantity for this unit is 36" + } + } + }, + "dcfId-required": { + "summary": "dcfId required", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "dcfId is a required site field" + } + } + }, + "rate-limit-not-valid": { + "summary": "rate limit not valid", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "Requested rateLimit is not valid. Please provide rateLimit in this format: {\\\"unit\\\": \\\"Mbps\\\", \\\"value\\\": 200}" + } + } + }, + "rate-limit-must-be-a-positive-integer": { + "summary": "rate limit must be a positive integer", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "Requested rateLimit.value must be a number greater than 0" + } + } + }, + "price-ref-id-must-a-string": { + "summary": "price ref id must be a string", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "priceRefId must be a valid string" + } + } + }, + "price-ref-id-must-be-unique": { + "summary": "price ref id must be unique", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "priceRefId for each site must be unique" + } + } + }, + "discount-code-invalid": { + "summary": "discount code invalid", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "Invalid code." + } + } + } + } + } + } + }, + "401": { + "description": "unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "bandwidth-required": { + "summary": "bandwidth required", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "You are not authorized to do that." + } + } + } + } + } + } + }, + "404": { + "description": "entity not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "datacenter-facilities": { + "summary": "datacenter facilities", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "One or more requested datacenter facilities could not be found." + } + } + } + } + } + } + } + }, + "tags": ["Pricing"], + "description": "CloudRouter Base Charge\n* Customer can change site configuration on demand.\n* Site charges are billed based on time in arrears.\n* Hourly Price is displayed to the customer (customer will only be billed to fraction of a second)\n* No charge for one site. Site charge will be calculated when the second site is added.\n* The customer will be shown an hourly price for the all the sites combined.\n* If a site is added or removed the hourly price for all sites will be updated.\n* Each eligible Console Connect Data Centre record will be allocated a CR pricing Zone\n* If all the sites are within the same metro location a flat charge will be applied.\n* Metro flat rate exceptions can be added for specific locations where metro costs are too expensive, these will receive a per mbps price.\n* Pricing will be determined based on the locations of all the sites using the per mbps price for the pricing zone.\n* The maximum bandwidth allowed on a site can be restricted based on the costbook location mapped to each sites DCF.\n* Bandwidth Limit = Maximum Rate Limit", + "operationId": "cloudrouter-pricing", + "summary": "CloudRouter" + } + }, + "/v2/pricing/l3vpn/{l3vpnId}/add-site": { + "post": { + "parameters": [ + { + "in": "path", + "name": "l3vpnId", + "description": "", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "", + "required": true, + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/CloudRouterPricingAddSiteStandard" + }, + { + "$ref": "#/components/schemas/CloudRouterPricingAddSiteSIMPool" + } + ] + }, + "examples": { + "Get-Price-Using-Metro": { + "summary": "Get the price of adding a new site to my existing L3vpn using metro flat price", + "value": { + "site": { + "simPool": false, + "portId": "66f2a3055027af9152a0a8c3", + "rateLimit": { + "unit": "mbps", + "value": 100 + }, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ] + } + } + }, + "Get-Price-All-Sim-Pool-Sites": { + "summary": "Get free pricing when all sites are sim pool sites", + "value": { + "site": { + "simPoolId": "SAMPLE_SIM_POOL_ID" + } + } + }, + "Get-Price-Adding-Sim-Pool-Using-Zone-Pricing": { + "summary": "Get the price of adding a new SIMPool site to existing L3vpn using zone pricing", + "value": { + "site": { + "simPoolId": "SAMPLE_SIM_POOL_ID" + } + } + }, + "Get-Price-Adding-Sim-Pool-Using-Metro-Flat-Price": { + "summary": "Get the price of adding a new SIMPool site to existing L3vpn using metro flat price", + "value": { + "site": { + "simPoolId": "SAMPLE_SIM_POOL_ID" + } + } + }, + "Get-Price-Using-Global-Pricing": { + "summary": "Get the price of adding a new site to existing L3vpn using GLOBAL pricing", + "value": { + "site": { + "portId": "66f2d8f3134d70f7a077d302", + "rateLimit": { + "unit": "mbps", + "value": 80 + }, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "simPool": false + } + } + }, + "Get-Price-Using-Same-Zone-Pricing": { + "summary": "Get the price of adding a new site to existing L3vpn using SAME-ZONE pricing", + "value": { + "site": { + "portId": "66f2df77c1088d46580d02ac", + "rateLimit": { + "unit": "mbps", + "value": 80 + }, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "simPool": false + } + } + }, + "Get-Price-Using-Cloud-Port": { + "summary": "Get the price of adding a new site to existing L3vpn using a cloud port", + "value": { + "site": { + "portId": "66f2e597e8abe96039eeceb9", + "rateLimit": { + "unit": "mbps", + "value": 100 + }, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "simPool": false + } + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CloudRouterSitePricing" + }, + "examples": { + "Get-Price-Using-Metro": { + "summary": "Get the price of adding a new site to existing L3vpn using metro flat price", + "value": { + "l3vpnId": "66f2a3dbb2ee7c6a60420863", + "baseL3vpnCost": 500, + "totalContractCost": 500, + "totalHourlySiteCost": 20, + "totalMonthlySiteCost": 14600, + "sites": [ + { + "site": { + "id": "3e67a984-9eb2-4837-842d-6ae405400cf7", + "companyId": "66f2a394a7a51d430f33bdcb", + "l3vpnId": "66f2a3dbb2ee7c6a60420863", + "name": "Sample l3vpn site", + "type": "COMPANY", + "portId": "66f2a3c87ee81a5fef8daea9", + "slVlanId": null, + "rateLimit": { + "rate": 10, + "unit": "Mbps", + "value": 10 + }, + "mtu": null, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "redundancySiteType": "primary", + "redundancyLinkedSiteId": null, + "status": "ACTIVE", + "simPoolId": null, + "company_id": "66f2a394a7a51d430f33bdcb", + "l3vpn_id": "66f2a3dbb2ee7c6a60420863", + "sim_pool_id": null, + "deleted_at": null, + "created_at": "2024-09-23T06:20:49.897Z", + "updated_at": "2024-09-23T06:20:49.897Z", + "port_id": "66f2a3c87ee81a5fef8daea9", + "discountId": null, + "priceRefId": "3e67a984-9eb2-4837-842d-6ae405400cf7", + "providerInfo": { + "portName": "samplePort", + "portId": "66f2a3c87ee81a5fef8daea9", + "portPartner": { + "type": "NONE", + "regionName": null, + "regionNames": null, + "zone": null, + "connectionSpeeds": [], + "vlanId": null, + "partnerPort": null + }, + "companyId": "66f2a394a7a51d430f33bdcb", + "dcfName": "sampleDcf", + "dcfId": "66f2a3fe751203ee1020e6f0", + "metroId": "66f2a40a627b4d86b4883b11", + "city": "Brisbane", + "country": "AUS" + } + }, + "hourlyCost": 10, + "dailyCost": 240, + "monthlyCost": 7200 + }, + { + "site": { + "portId": "66f2a428f0d298684fbddf2e", + "rateLimit": { + "unit": "mbps", + "value": 100 + }, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "providerInfo": { + "portName": "samplePort2", + "portId": "66f2a428f0d298684fbddf2e", + "portPartner": { + "type": "NONE", + "regionName": null, + "regionNames": null, + "zone": null, + "connectionSpeeds": [], + "vlanId": null, + "partnerPort": null + }, + "companyId": "66f2a394a7a51d430f33bdcb", + "dcfName": "sampleDcf", + "dcfId": "66f2a450116bb784aa0aa749", + "metroId": "66f2a458e5444065df184b97", + "city": "Brisbane", + "country": "AUS" + } + }, + "hourlyCost": 10, + "dailyCost": 240, + "monthlyCost": 7200 + } + ], + "discount": null + } + }, + "Get-Price-All-Sim-Pool-Sites": { + "summary": "Get free pricing when all sites are sim pool sites", + "value": { + "l3vpnId": "66f2c68122af4be3f22dd3f2", + "totalHourlySiteCost": 0, + "totalMonthlySiteCost": 0, + "sites": [ + { + "hourlyCost": 0, + "dailyCost": 0, + "monthlyCost": 0, + "site": { + "id": "e78b7295-73a0-4f26-a52f-bd3cebc1e8f9", + "companyId": "66f2c6ad913cc4a8fb10ba6b", + "l3vpnId": "66f2c68122af4be3f22dd3f2", + "name": "sample sim pool site", + "type": "COMPANY", + "portId": "66f2c6c1e0767a98e1fcee34", + "slVlanId": null, + "rateLimit": { + "rate": 10, + "unit": "Mbps" + }, + "mtu": null, + "classOfService": null, + "redundancySiteType": "primary", + "redundancyLinkedSiteId": null, + "status": "ACTIVE", + "simPoolId": "0a7c21cc-7781-46d2-a88f-a35dcf459bb7", + "company_id": "66f2c6ad913cc4a8fb10ba6b", + "l3vpn_id": "66f2c68122af4be3f22dd3f2", + "sim_pool_id": "0a7c21cc-7781-46d2-a88f-a35dcf459bb7", + "deleted_at": null, + "created_at": "2024-09-23T11:10:27.969Z", + "updated_at": "2024-09-23T11:10:27.974Z", + "port_id": "66f2c6c1e0767a98e1fcee34", + "discountId": null + } + }, + { + "hourlyCost": 0, + "dailyCost": 0, + "monthlyCost": 0, + "site": { + "simPoolId": "SAMPLE_SIM_POOL_ID", + "simPool": true, + "discountId": null, + "portId": "66f2c6cae101d105040243ab" + } + } + ] + } + }, + "Get-Price-Adding-Sim-Pool-Using-Zone-Pricing": { + "summary": "Get the price of adding a new SIMPool site to existing L3vpn using zone pricing", + "value": { + "l3vpnId": "66f2cc9c55d56826c4d20065", + "baseL3vpnCost": 500, + "totalContractCost": 500, + "totalHourlySiteCost": 20, + "totalMonthlySiteCost": 14600, + "sites": [ + { + "site": { + "id": "65bdd441-bde5-4e60-98e9-dca7fa296fde", + "companyId": "66f2ccc173925f8b55a1b972", + "l3vpnId": "66f2cc9c55d56826c4d20065", + "name": "Sample l3vpn site", + "type": "COMPANY", + "portId": "66f2ccd1acc13990ef6323ef", + "slVlanId": null, + "rateLimit": { + "rate": 10, + "unit": "Mbps", + "value": 10 + }, + "mtu": null, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "redundancySiteType": "primary", + "redundancyLinkedSiteId": null, + "status": "ACTIVE", + "simPoolId": null, + "company_id": "66f2ccc173925f8b55a1b972", + "l3vpn_id": "66f2cc9c55d56826c4d20065", + "sim_pool_id": null, + "deleted_at": null, + "created_at": "2024-09-23T11:10:27.948Z", + "updated_at": "2024-09-23T11:10:27.948Z", + "port_id": "66f2ccd1acc13990ef6323ef", + "discountId": null, + "priceRefId": "65bdd441-bde5-4e60-98e9-dca7fa296fde", + "providerInfo": { + "portName": "samplePort", + "portId": "66f2ccd1acc13990ef6323ef", + "portPartner": { + "type": "NONE", + "regionName": null, + "regionNames": null, + "zone": null, + "connectionSpeeds": [], + "vlanId": null, + "partnerPort": null + }, + "companyId": "66f2ccc173925f8b55a1b972", + "dcfName": "sampleDcf", + "dcfId": "66f2cd1f99dd778ec0ccba12", + "metroId": "66f2cd2ef3ee84fba9ec2e0f", + "city": "Brisbane", + "country": "AUS" + } + }, + "hourlyCost": 10, + "dailyCost": 240, + "monthlyCost": 7200 + }, + { + "site": { + "rateLimit": {}, + "providerInfo": null + }, + "hourlyCost": 10, + "dailyCost": 240, + "monthlyCost": 7200 + } + ], + "discount": null + } + }, + "Get-Price-Adding-Sim-Pool-Using-Metro-Flat-Price": { + "summary": "Get the price of adding a new SIMPool site to existing L3vpn using metro flat price", + "value": { + "l3vpnId": "66f2d47089fe1ccc62985a4f", + "baseL3vpnCost": 500, + "totalContractCost": 500, + "totalHourlySiteCost": 20, + "totalMonthlySiteCost": 14600, + "sites": [ + { + "site": { + "id": "bcbc3b3a-0b89-4302-8cca-08cf55623e98", + "companyId": "66f2d4994024fc358e2e9b04", + "l3vpnId": "66f2d47089fe1ccc62985a4f", + "name": "Sample l3vpn site", + "type": "COMPANY", + "portId": "66f2d4b6c2966967a8b3da6e", + "slVlanId": null, + "rateLimit": { + "rate": 10, + "unit": "Mbps", + "value": 10 + }, + "mtu": null, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "redundancySiteType": "primary", + "redundancyLinkedSiteId": null, + "status": "ACTIVE", + "simPoolId": null, + "company_id": "66f2d4994024fc358e2e9b04", + "l3vpn_id": "66f2d47089fe1ccc62985a4f", + "sim_pool_id": null, + "deleted_at": null, + "created_at": "2024-09-23T11:10:27.948Z", + "updated_at": "2024-09-23T11:10:27.948Z", + "port_id": "66f2d4b6c2966967a8b3da6e", + "discountId": null, + "priceRefId": "bcbc3b3a-0b89-4302-8cca-08cf55623e98", + "providerInfo": { + "portName": "samplePort", + "portId": "66f2d4b6c2966967a8b3da6e", + "portPartner": { + "type": "NONE", + "regionName": null, + "regionNames": null, + "zone": null, + "connectionSpeeds": [], + "vlanId": null, + "partnerPort": null + }, + "companyId": "66f2d4994024fc358e2e9b04", + "dcfName": "sampleDcf", + "dcfId": "66f2d50ee67e10d742a375fa", + "metroId": "66f2d5144991313b95b503a9", + "city": "Brisbane", + "country": "AUS" + } + }, + "hourlyCost": 10, + "dailyCost": 240, + "monthlyCost": 7200 + }, + { + "site": { + "rateLimit": {}, + "providerInfo": null + }, + "hourlyCost": 10, + "dailyCost": 240, + "monthlyCost": 7200 + } + ], + "discount": null + } + }, + "Get-Price-Using-Global-Pricing": { + "summary": "Get the price of adding a new site to existing L3vpn using GLOBAL pricing", + "value": { + "l3vpnId": "66f2d8756645596fd6ffc7b5", + "baseL3vpnCost": 500, + "totalContractCost": 500, + "totalHourlySiteCost": 20, + "totalMonthlySiteCost": 14600, + "sites": [ + { + "site": { + "id": "3fc98a37-a94e-4cd4-9da9-06a5b1308c08", + "companyId": "66f2d8923a56f13b7847dcca", + "l3vpnId": "66f2d8756645596fd6ffc7b5", + "name": "Sample l3vpn site", + "type": "COMPANY", + "portId": "66f2d8a4be4d1951127f5e65", + "slVlanId": null, + "rateLimit": { + "rate": 10, + "unit": "Mbps", + "value": 10 + }, + "mtu": null, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "redundancySiteType": "primary", + "redundancyLinkedSiteId": null, + "status": "ACTIVE", + "simPoolId": null, + "company_id": "66f2d8923a56f13b7847dcca", + "l3vpn_id": "66f2d8756645596fd6ffc7b5", + "sim_pool_id": null, + "deleted_at": null, + "created_at": "2024-09-23T11:10:27.948Z", + "updated_at": "2024-09-23T11:10:27.948Z", + "port_id": "66f2d8a4be4d1951127f5e65", + "discountId": null, + "priceRefId": "3fc98a37-a94e-4cd4-9da9-06a5b1308c08", + "providerInfo": { + "portName": "samplePort", + "portId": "66f2d8a4be4d1951127f5e65", + "portPartner": { + "type": "NONE", + "regionName": null, + "regionNames": null, + "zone": null, + "connectionSpeeds": [], + "vlanId": null, + "partnerPort": null + }, + "companyId": "66f2d8923a56f13b7847dcca", + "dcfName": "sampleDcf", + "dcfId": "66f2d8c66675bff21a1c119f", + "metroId": "66f2d8e126c5847f321a6635", + "city": "Brisbane", + "country": "AUS" + } + }, + "hourlyCost": 10, + "dailyCost": 240, + "monthlyCost": 7200 + }, + { + "site": { + "portId": "66f2d8f3134d70f7a077d302", + "rateLimit": { + "unit": "mbps", + "value": 80 + }, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "providerInfo": { + "portName": "sampleLondonPort", + "portId": "66f2d8f3134d70f7a077d302", + "portPartner": { + "type": "NONE", + "regionName": null, + "regionNames": null, + "zone": null, + "connectionSpeeds": [], + "vlanId": null, + "partnerPort": null + }, + "companyId": "66f2d8923a56f13b7847dcca", + "dcfName": "samplelondonDcf", + "dcfId": "66f2dafa8366cb98a476886c", + "metroId": "66f2db017d6e3fa60ebb817f" + } + }, + "hourlyCost": 10, + "dailyCost": 240, + "monthlyCost": 7200 + } + ], + "discount": null + } + }, + "Get-Price-Using-Same-Zone-Pricing": { + "summary": "Get the price of adding a new site to existing L3vpn using SAME-ZONE pricing", + "value": { + "l3vpnId": "66f2df89ba67c9c87452f97c", + "baseL3vpnCost": 500, + "totalContractCost": 500, + "totalHourlySiteCost": 20, + "totalMonthlySiteCost": 14600, + "sites": [ + { + "site": { + "id": "a7d1dcef-6334-42f6-a0f2-a66d3ccd58ee", + "companyId": "66f2df99eb3479bcd57b3718", + "l3vpnId": "66f2df89ba67c9c87452f97c", + "name": "Sample l3vpn site", + "type": "COMPANY", + "portId": "66f2dfe1f4940c7d947f1ba0", + "slVlanId": null, + "rateLimit": { + "rate": 10, + "unit": "Mbps", + "value": 10 + }, + "mtu": null, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "redundancySiteType": "primary", + "redundancyLinkedSiteId": null, + "status": "ACTIVE", + "simPoolId": null, + "company_id": "66f2df99eb3479bcd57b3718", + "l3vpn_id": "66f2df89ba67c9c87452f97c", + "sim_pool_id": null, + "deleted_at": null, + "created_at": "2024-09-23T11:10:27.948Z", + "updated_at": "2024-09-23T11:10:27.948Z", + "port_id": "66f2dfe1f4940c7d947f1ba0", + "discountId": null, + "priceRefId": "a7d1dcef-6334-42f6-a0f2-a66d3ccd58ee", + "providerInfo": { + "portName": "samplePort", + "portId": "66f2dfe1f4940c7d947f1ba0", + "portPartner": { + "type": "NONE", + "regionName": null, + "regionNames": null, + "zone": null, + "connectionSpeeds": [], + "vlanId": null, + "partnerPort": null + }, + "companyId": "66f2df99eb3479bcd57b3718", + "dcfName": "sampleDcf", + "dcfId": "66f2e0611fa99e1540ed1578", + "metroId": "66f2e06beb23cff56b0e896b", + "city": "Brisbane", + "country": "AUS" + } + }, + "hourlyCost": 10, + "dailyCost": 240, + "monthlyCost": 7200 + }, + { + "site": { + "portId": "66f2df77c1088d46580d02ac", + "rateLimit": { + "unit": "mbps", + "value": 80 + }, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "providerInfo": { + "portName": "sampleGoldCoastPort", + "portId": "66f2df77c1088d46580d02ac", + "portPartner": { + "type": "NONE", + "regionName": null, + "regionNames": null, + "zone": null, + "connectionSpeeds": [], + "vlanId": null, + "partnerPort": null + }, + "companyId": "66f2df99eb3479bcd57b3718", + "dcfName": "sampleGoldCoastDcf", + "dcfId": "66f2e0975b29e157d322ca46", + "metroId": "66f2e09d19b88a1a2ceb6526" + } + }, + "hourlyCost": 10, + "dailyCost": 240, + "monthlyCost": 7200 + } + ], + "discount": null + } + }, + "Get-Price-Using-Cloud-Port": { + "summary": "Get the price of adding a new site to existing L3vpn using a cloud port", + "value": { + "l3vpnId": "66f2e5a3f00841a680b7aaa8", + "baseL3vpnCost": 500, + "totalContractCost": 500, + "totalHourlySiteCost": 20, + "totalMonthlySiteCost": 14600, + "sites": [ + { + "site": { + "id": "3b53c7b4-264e-4ea3-ae4b-4045254d6a44", + "companyId": "66f2e5e06f26be6115f87580", + "l3vpnId": "66f2e5a3f00841a680b7aaa8", + "name": "Donut l3vpn site", + "type": "COMPANY", + "portId": "66f2e5f4de222cca8f452a54", + "slVlanId": null, + "rateLimit": { + "rate": 10, + "unit": "Mbps", + "value": 10 + }, + "mtu": null, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "redundancySiteType": "primary", + "redundancyLinkedSiteId": null, + "status": "ACTIVE", + "simPoolId": null, + "company_id": "66f2e5e06f26be6115f87580", + "l3vpn_id": "66f2e5a3f00841a680b7aaa8", + "sim_pool_id": null, + "deleted_at": null, + "created_at": "2024-09-23T11:10:27.948Z", + "updated_at": "2024-09-23T11:10:27.948Z", + "port_id": "66f2e5f4de222cca8f452a54", + "discountId": null, + "priceRefId": "3b53c7b4-264e-4ea3-ae4b-4045254d6a44", + "providerInfo": { + "portName": "samplePort", + "portId": "66f2e5f4de222cca8f452a54", + "portPartner": { + "type": "NONE", + "regionName": null, + "regionNames": null, + "zone": null, + "connectionSpeeds": [], + "vlanId": null, + "partnerPort": null + }, + "companyId": "66f2e5e06f26be6115f87580", + "dcfName": "sampleDcf", + "dcfId": "66f2e61e8a42c0aaeefd149a", + "metroId": "66f2e62c483a6aca15d68309", + "city": "Brisbane", + "country": "AUS" + } + }, + "hourlyCost": 10, + "dailyCost": 240, + "monthlyCost": 7200 + }, + { + "site": { + "portId": "66f2e597e8abe96039eeceb9", + "rateLimit": { + "unit": "mbps", + "value": 100 + }, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "providerInfo": { + "portName": "sampleCloudPort", + "portId": "66f2e597e8abe96039eeceb9", + "portPartner": { + "type": "AWS", + "regionName": null, + "connectionSpeeds": [ + { + "value": 50, + "type": "AUTOMATIC" + }, + { + "value": 100, + "type": "AUTOMATIC" + } + ], + "vlanId": null, + "partnerPort": "smp-prtnrprt", + "regionNames": ["ap-southeast-1"], + "zone": null + }, + "companyId": "66f29e236bd7c1c8ea49d42c", + "dcfName": "sampleDcf", + "dcfId": "66f2e61e8a42c0aaeefd149a", + "metroId": "66f2e62c483a6aca15d68309", + "city": "Brisbane", + "country": "AUS" + } + }, + "hourlyCost": 10, + "dailyCost": 240, + "monthlyCost": 7200 + } + ], + "discount": null + } + } + } + } + } + }, + "400": { + "description": "validations", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "site-required": { + "summary": "site required", + "value": { + "statusCode": 400, + "name": "Error", + "message": "site is a required argument" + } + }, + "portId-required": { + "summary": "portId required", + "value": { + "statusCode": 400, + "name": "Error", + "message": "portId is a required site field" + } + }, + "port-not-owned": { + "summary": "port not owned", + "value": { + "statusCode": 400, + "name": "Error", + "message": "Port with id: 6328f276bb71e4e4ae01e9dd does not belong to the company" + } + }, + "rate-limit-required": { + "summary": "rate limit required", + "value": { + "statusCode": 400, + "name": "Error", + "message": "rateLimit is required" + } + }, + "rate-limit-invalid": { + "summary": "rate limit invalid", + "value": { + "statusCode": 400, + "name": "Error", + "message": "Requested rateLimit is not valid. Please provide rateLimit in this format: {\\\"unit\\\": \\\"Mbps\\\", \\\"value\\\": 200}" + } + }, + "rate-limit-value-invalid": { + "summary": "rate limit value invalid", + "value": { + "statusCode": 400, + "name": "Error", + "message": "Requested rateLimit.value must be a number greater than 0" + } + }, + "invalid-class-of-service": { + "summary": "invalid class of service", + "value": { + "statusCode": 400, + "name": "Error", + "message": "Site has an invalid Class of Service." + } + }, + "invalid-class-of-service-name": { + "summary": "invalid class of service name", + "value": { + "statusCode": 400, + "name": "Error", + "message": "In Site there is an invalid Class of Service name." + } + }, + "class-of-service-names-should-only-be-used-once": { + "summary": "class of service names should only be used once", + "value": { + "statusCode": 400, + "name": "Error", + "message": "In Site the Class of Service names cannot be repeated." + } + }, + "class-of-service-percentage": { + "summary": "class of service percentage", + "value": { + "statusCode": 400, + "name": "Error", + "message": "In Site the Class of Service percentages must sum to 100%." + } + }, + "site-bandwidth-sum": { + "summary": "site bandwidth sum", + "value": { + "statusCode": 400, + "name": "Error", + "message": "The combined bandwidth of all sites is greater than the allowed CloudRouter bandwidth of 1GB. Please contact support@consoleconnect.com to increase your CloudRouter bandwidth." + } + } + } + } + } + }, + "404": { + "description": "entity not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "port": { + "summary": "port", + "value": { + "error": { + "statusCode": 404, + "name": "Error", + "message": "A port can not be found with the given id" + } + } + } + } + } + } + } + }, + "tags": ["Pricing"], + "description": "Find pricing for adding a site to a CloudRouter.", + "operationId": "cloudrouter-pricing-add-site", + "summary": "CloudRouter - Add site" + } + }, + "/v2/pricing/l3vpn/{l3vpnId}/delete-site": { + "post": { + "parameters": [ + { + "in": "path", + "name": "l3vpnId", + "description": "", + "required": true, + "schema": { + "type": "string", + "description": "" + } + } + ], + "requestBody": { + "description": "", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "siteId": { + "type": "string", + "description": "" + } + } + }, + "example": { + "siteId": "6fcac435-ce01-4fef-b316-bcf80537970f" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CloudRouterSitePricing" + }, + "examples": { + "success": { + "value": { + "l3vpnId": "6328f276bb71e4e4ae01e9e9", + "baseL3vpnCost": 500, + "totalContractCost": 500, + "totalHourlySiteCost": 20, + "totalMonthlySiteCost": 14600, + "sites": [ + { + "site": { + "id": "8def56cf-fe19-4b25-b6b6-f61cee449c21", + "companyId": "5ea242323962644b52fc4348", + "l3vpnId": "6328f276bb71e4e4ae01e9e9", + "name": "Donut l3vpn site", + "type": "COMPANY", + "portId": "6328f276bb71e4e4ae01e9e1", + "slVlanId": null, + "rateLimit": { + "rate": 10, + "unit": "Mbps", + "value": 10 + }, + "mtu": null, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "redundancySiteType": "primary", + "redundancyLinkedSiteId": null, + "status": "ACTIVE", + "simPoolId": null, + "company_id": "5ea242323962644b52fc4348", + "l3vpn_id": "6328f276bb71e4e4ae01e9e9", + "deleted_at": null, + "created_at": "2022-09-19T22:51:34.972Z", + "updated_at": "2022-09-19T22:51:34.972Z", + "discountId": null, + "priceRefId": "8def56cf-fe19-4b25-b6b6-f61cee449c21", + "providerInfo": { + "portName": "donutBrisbanePort", + "portId": "6328f276bb71e4e4ae01e9e1", + "portPartner": { + "type": "NONE", + "regionName": null, + "regionNames": null, + "zone": null, + "connectionSpeeds": [ + { + "vlanId": null, + "partnerPort": null + } + ] + }, + "companyId": "5ea242323962644b52fc4348", + "dcfName": "brisbaneDcf", + "dcfId": "6328f276bb71e4e4ae01e9d8", + "metroId": "6328f276bb71e4e4ae01e9d0", + "city": "Brisbane", + "country": "AUS" + } + }, + "hourlyCost": 10, + "dailyCost": 240, + "monthlyCost": 7200 + }, + { + "site": { + "portId": "6328f276bb71e4e4ae01e9e1", + "rateLimit": { + "unit": "mbps", + "value": 100 + }, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "providerInfo": { + "portName": "donutBrisbanePort", + "portId": "6328f276bb71e4e4ae01e9e1", + "portPartner": { + "type": "NONE", + "regionName": null, + "regionNames": null, + "zone": null, + "connectionSpeeds": null, + "vlanId": null, + "partnerPort": null + }, + "companyId": "5ea242323962644b52fc4348", + "dcfName": "brisbaneDcf", + "dcfId": "6328f276bb71e4e4ae01e9d8", + "metroId": "6328f276bb71e4e4ae01e9d0", + "city": "Brisbane", + "country": "AUS" + } + }, + "hourlyCost": 10, + "dailyCost": 240, + "monthlyCost": 7200 + } + ], + "discount": null + } + }, + "poa": { + "value": { + "baseL3vpnCost": null, + "totalContractCost": null, + "totalHourlySiteCost": null, + "sites": [ + { + "portId": "6328f276bb71e4e4ae01e9e8", + "rateLimit": { + "unit": "mbps", + "value": 50 + }, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "discountId": null, + "dailyCost": null, + "hourlyCost": null, + "monthlyCost": null + } + ] + } + } + } + } + } + }, + "400": { + "description": "validations", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "site-required": { + "summary": "site required", + "value": { + "statusCode": 400, + "name": "Error", + "message": "site is a required argument" + } + }, + "portId-required": { + "summary": "portId required", + "value": { + "statusCode": 400, + "name": "Error", + "message": "portId is a required site field" + } + }, + "port-not-owned": { + "summary": "port not owned", + "value": { + "statusCode": 400, + "name": "Error", + "message": "Port with id: 6328f276bb71e4e4ae01e9dd does not belong to the company" + } + }, + "rate-limit-required": { + "summary": "rate limit required", + "value": { + "statusCode": 400, + "name": "Error", + "message": "rateLimit is required" + } + }, + "rate-limit-invalid": { + "summary": "rate limit invalid", + "value": { + "statusCode": 400, + "name": "Error", + "message": "Requested rateLimit is not valid. Please provide rateLimit in this format: {\\\"unit\\\": \\\"Mbps\\\", \\\"value\\\": 200}" + } + }, + "rate-limit-value-invalid": { + "summary": "rate limit value invalid", + "value": { + "statusCode": 400, + "name": "Error", + "message": "Requested rateLimit.value must be a number greater than 0" + } + }, + "invalid-class-of-service": { + "summary": "invalid class of service", + "value": { + "statusCode": 400, + "name": "Error", + "message": "Site has an invalid Class of Service." + } + }, + "invalid-class-of-service-name": { + "summary": "invalid class of service name", + "value": { + "statusCode": 400, + "name": "Error", + "message": "In Site there is an invalid Class of Service name." + } + }, + "class-of-service-names-should-only-be-used-once": { + "summary": "class of service names should only be used once", + "value": { + "statusCode": 400, + "name": "Error", + "message": "In Site the Class of Service names cannot be repeated." + } + }, + "class-of-service-percentage": { + "summary": "class of service percentage", + "value": { + "statusCode": 400, + "name": "Error", + "message": "In Site the Class of Service percentages must sum to 100%." + } + }, + "site-bandwidth-sum": { + "summary": "site bandwidth sum", + "value": { + "statusCode": 400, + "name": "Error", + "message": "The combined bandwidth of all sites is greater than the allowed CloudRouter bandwidth of 1GB. Please contact support@consoleconnect.com to increase your CloudRouter bandwidth." + } + } + } + } + } + }, + "404": { + "description": "entity not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + }, + "examples": { + "port": { + "summary": "port", + "value": { + "error": { + "statusCode": 404, + "name": "Error", + "message": "A port can not be found with the given id" + } + } + } + } + } + } + } + }, + "tags": ["Pricing"], + "description": "Find pricing for deleting a CloudRouter site.", + "operationId": "cloudrouter-pricing-delete-site", + "summary": "CloudRouter - Delete site" + } + }, + "/api/company/{username}/metro": { + "get": { + "parameters": [ + { + "description": "The username of the company you are checking.", + "in": "path", + "example": "consoleconnect", + "name": "username", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "When true, only shows Metros the specified company has Ports in.", + "example": true, + "in": "query", + "name": "hasPort", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "results": [ + { + "city": "London", + "count": 20, + "country": "UK", + "name": "London, UK" + } + ] + } + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Metros"], + "description": "This endpoint is used to list the Metros a given Company is present at, usually with Ports.", + "operationId": "metro-count-for-company", + "summary": "List Metro Count for a Company" + } + }, + "/api/company/{username}/metro/capabilities": { + "get": { + "parameters": [ + { + "description": "The username of the Company to query.", + "in": "path", + "example": "consoleconnect", + "name": "username", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "results": [ + { + "capabilities": { + "layer2": true, + "layer3": true + }, + "code": "BNE", + "country": "AU", + "description": "Brisbane city metro.", + "id": "d466b388d3e9ee0a92177910", + "name": "Brisbane", + "ready": true, + "regionIds": ["236107000000000000000001"], + "createdAt": "2016-02-12T09:01:00.000Z", + "updatedAt": "2016-02-12T09:01:00.000Z", + "firstDataCenterFacilityId": "5af90d4548ba7200120a194b" + } + ] + } + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Metros"], + "description": "Returns a list of Metros a given Company has a presence at. This is typically in the form of Port.", + "operationId": "get-company-metros", + "summary": "List Metros for a Company" + } + }, + "/api/metro/{metroId}": { + "get": { + "parameters": [ + { + "description": "Metro ObjectId", + "in": "path", + "example": "235014958511023495968818", + "name": "metroId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "results": [], + "controllers": [], + "metro": { + "id": "77d9f1fbbcaa906f3cddb6d1", + "name": "Brisbane", + "code": "BNE", + "description": "Brisbane metro area.", + "ready": true, + "country": "AU", + "rir": "APNIC", + "regionIds": ["5b7f5dd15acc27000a7acdf9"], + "updatedAt": "2020-08-18T04:08:43.554Z", + "createdAt": "2017-12-18T00:45:44.120Z", + "deleted": false, + "deletedAt": null + }, + "ports": {}, + "asns": {} + } + } + } + } + }, + "description": "OK", + "headers": {} + }, + "404": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "error": { + "statusCode": 404, + "status": 404, + "message": "The metro with that ID does not exist" + } + } + } + } + } + }, + "description": "Not Found", + "headers": {} + } + }, + "tags": ["Metros"], + "description": "Returns the basic information for a Metro.", + "operationId": "get-metro", + "summary": "Get Metro by ID" + } + }, + "/v2/data-center-facility/locations": { + "get": { + "summary": "Get DCF locations", + "tags": ["Data Center Facilities (DCFs)"], + "description": "Before diving directly into finding DCFs, it is helpful to know which locations are available to order Ports from. This endpoint returns a list of country and city pairs that can be used in search.\n\nThe criteria of the list is based on the following:\n* A DCF is ready for ordering Ports from: `dataCenterFacility.ready`", + "operationId": "GetDCFLocations", + "responses": { + "200": { + "description": "Returns a list of locations with available DCFs", + "content": { + "application/json": { + "examples": { + "list": { + "value": [ + { + "country": "AU,", + "city": "Brisbane" + }, + { + "country": "US,", + "city": "New York" + }, + { + "country": "JP,", + "city": "Tokyo" + } + ] + } + } + } + } + } + } + } + }, + "/v2/data-center-facility/cloud-locations": { + "get": { + "summary": "Get Cloud DCF locations", + "tags": ["Data Center Facilities (DCFs)"], + "description": "This endpoint is much like finding general DCF locations, only it narrows down the criteria even further by returning only the locations that our Cloud partners have available ports in. This endpoint is useful when you want to find DCFs to create a Layer 2 Connection to a Cloud provider (e.g. AWS).", + "operationId": "GetCloudDCFLocations", + "responses": { + "200": { + "description": "Returns a list of DCFs available from Clouds.", + "content": { + "application/json": { + "examples": { + "list": { + "value": [ + { + "country": "AU,", + "city": "Brisbane" + }, + { + "country": "US,", + "city": "New York" + }, + { + "country": "JP,", + "city": "Tokyo" + } + ] + } + } + } + } + } + } + } + }, + "/v2/data-center-facility": { + "get": { + "summary": "Search DCFs", + "operationId": "getDcfs", + "tags": ["Data Center Facilities (DCFs)"], + "description": "Search for available DCFs on and off the network.\n\nTo ensure a DCF is ready for physical port orders, ensure the property `dataCenterFacility.ready: true` is set when searching for DCFs. \nTo find a DCF that supports Hybrid NNI Ports, search for `dataCenterFacility.nniReady: true`.\n\nSee the Query Parameters section below for search examples.", + "parameters": [ + { + "description": "Criteria for searching DCFs.", + "in": "query", + "name": "filter", + "required": true, + "schema": { + "$ref": "#/components/schemas/Filter" + }, + "examples": { + "searchBySpeeds": { + "summary": "Search DCFs by Speed. Value in Mbps.", + "value": "{\n \"where\": {\n \"dataCenterFacility.speeds.value\": 10000,\n \"dataCenterFacility.ready\": true\n },\n \"skip\": 0,\n \"limit\": 10\n}" + }, + "searchByLocation": { + "summary": "Search DCFs by Location.", + "value": "{\n \"where\": {\n \"company.addresses.country\": \"AU\",\n \"company.addresses.city\": \"Sydney\"\n \"dataCenterFacility.speeds.value\": 10000,\n \"dataCenterFacility.ready\": true\n },\n \"skip\": 0,\n \"limit\": 10\n}" + }, + "searchByName": { + "summary": "Search DCFs by Name.", + "value": "{\n \"where\": {\n \"name\": {\"like\": \"DCF Name\", \"options\": \"i\"},\n \"dataCenterFacility.ready\": true\n },\n \"skip\": 0,\n \"limit\": 10\n}" + }, + "searchByCrossConnectAddOn": { + "summary": "Search DCFs by CrossConnect Add On.", + "value": "{\n \"where\": {\n \"dataCenterFacility.canBundleCrossConnect\": true,\n \"dataCenterFacility.ready\": true\n },\n \"skip\": 0,\n \"limit\": 10\n}" + }, + "searchByFreeCrossConnect": { + "summary": "Search DCFs by Free CrossConnect.", + "value": "{\n \"where\": {\n \"tags\": {\"in\": [\"free-cross-connect\"]},\n \"dataCenterFacility.ready\": true\n },\n \"skip\": 0,\n \"limit\": 10\n}" + }, + "searchByOffNet": { + "summary": "Search DCFs by Extended (Off-Net).", + "value": "{\n \"where\": {\n \"tags\": {\"in\": \"offnet\"},\n \"dataCenterFacility.ready\": true\n },\n \"skip\": 0,\n \"limit\": 10\n}" + }, + "searchByOnNet": { + "summary": "Search DCFs by On-Net.", + "value": "{\n \"where\": {\n \"tags\": {\"nin\": \"offnet\"},\n \"dataCenterFacility.ready\": true\n },\n \"skip\": 0,\n \"limit\": 10\n}" + }, + "searchByMonthlyPorts": { + "summary": "Search DCFs that accept month-to-month port orders.", + "value": "{\n \"where\": {\n \"tags\": {\"in\": \"monthly-ports\"},\n \"dataCenterFacility.ready\": true\n },\n \"skip\": 0,\n \"limit\": 10\n}" + } + } + } + ], + "responses": { + "200": { + "description": "returns a list of DCFs or an empty array", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DataCenterFacility" + } + }, + "examples": { + "results": { + "value": [ + { + "id": "507f1f77bcf86cd799439011", + "name": "Console Connect - Hermes House", + "username": "pccwg-hermes-house", + "company": { + "addresses": [ + { + "street": "5/F, Hermes House,10 Middle Road,Tsim Sha Tsui", + "city": "Hong Kong", + "country": "CN" + } + ] + }, + "dataCenterFacility": { + "metroId": "507f1f77bcf86cd799439011", + "ready": true, + "nniReady": true, + "speeds": [ + { + "name": "10000 Mbps", + "value": 10000 + } + ], + "canBundleCrossConnect": false + } + } + ] + }, + "empty": { + "value": [] + } + } + } + } + } + } + } + }, + "/v2/data-center-facility/search": { + "get": { + "summary": "Search DCFs by criteria", + "operationId": "searchDcfsByCriteria", + "tags": ["Data Center Facilities (DCFs)"], + "description": "Search for available DCFs on and off the network. \nSee the Query Parameters section below for search examples.", + "parameters": [ + { + "description": "Criteria for searching DCFs.", + "in": "query", + "name": "criteria", + "required": true, + "schema": { + "type": "object", + "properties": { + "speeds": { + "description": "Port speed in Mbps", + "type": "array", + "items": { + "type": "integer" + } + }, + "locations": { + "description": "A comma separated string where the city is the first and the two letter country code is second", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "The name of a Data Center Facility", + "type": "string" + }, + "crossConnect": { + "description": "Does the Data Center Facility support Cross Connects?", + "type": "array", + "items": { + "type": "string" + } + }, + "networkStatus": { + "description": "Is the Data Center Facility 'onNet' or 'offNet'?", + "type": "array", + "items": { + "type": "string" + } + }, + "portReady": { + "description": "A flag to check if a Data Center Facility is ready for port orders. True by default.", + "type": "boolean" + } + } + }, + "examples": { + "searchBySpeeds": { + "summary": "Search DCFs by Speed. Value in Mbps.", + "value": "{\n \"speeds\": [1000]\n}" + }, + "searchByLocation": { + "summary": "Search DCFs by Location.", + "value": "{\n \"locations\": [\"Sydney,AU\"],\n \"speeds\": [10000]\n}" + }, + "searchByName": { + "summary": "Search DCFs by Name.", + "value": "{\n \"name\": \"DCF Name\"\n}" + }, + "searchByCrossConnectAddOn": { + "summary": "Search DCFs by CrossConnect Add On.", + "value": "{\n \"crossConnect\": [\"addOn\"]\n}" + }, + "searchByFreeCrossConnect": { + "summary": "Search DCFs by Free CrossConnect.", + "value": "{\n \"crossConnect\": [\"free\"]\n}" + }, + "searchByOffNet": { + "summary": "Search DCFs by Extended (Off-Net).", + "value": "{\n networkStatus: ['offNet']\n}" + }, + "searchByOnNet": { + "summary": "Search DCFs by On-Net.", + "value": "{\n networkStatus: ['onNet']\n}" + } + } + }, + { + "name": "page", + "description": "the page number of the results", + "in": "query", + "schema": { + "type": "integer" + }, + "example": 1 + }, + { + "name": "pageSize", + "description": "the number of results per page", + "in": "query", + "schema": { + "type": "integer" + }, + "example": 10 + } + ], + "responses": { + "200": { + "description": "returns a list of DCFs or an empty array", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DataCenterFacility" + } + }, + "examples": { + "results": { + "value": [ + { + "id": "507f1f77bcf86cd799439011", + "name": "Console Connect - Hermes House", + "username": "pccwg-hermes-house", + "company": { + "addresses": [ + { + "street": "5/F, Hermes House,10 Middle Road,Tsim Sha Tsui", + "city": "Hong Kong", + "country": "CN" + } + ] + }, + "dataCenterFacility": { + "metroId": "507f1f77bcf86cd799439011", + "ready": true, + "nniReady": true, + "speeds": [ + { + "name": "10000 Mbps", + "value": 10000 + } + ], + "canBundleCrossConnect": false + } + } + ] + }, + "empty": { + "value": [] + } + } + } + } + } + } + } + }, + "/v2/data-center-facility/{id}": { + "get": { + "summary": "Get DCF by ID", + "tags": ["Data Center Facilities (DCFs)"], + "description": "Get a single DCF by its ID.", + "operationId": "GetDCFById", + "parameters": [ + { + "description": "The ObjectId of the DCF.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "507f1f77bcf86cd799439011" + } + ], + "responses": { + "200": { + "description": "Returns a single DCF.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataCenterFacility" + }, + "example": { + "id": "507f1f77bcf86cd799439011", + "name": "Console Connect - Hermes House", + "username": "pccwg-hermes-house", + "company": { + "addresses": [ + { + "street": "5/F, Hermes House,10 Middle Road,Tsim Sha Tsui", + "city": "Hong Kong", + "country": "CN" + } + ] + }, + "dataCenterFacility": { + "metroId": "507f1f77bcf86cd799439011", + "ready": true, + "nniReady": true, + "speeds": [ + { + "name": "10000 Mbps", + "value": 10000 + } + ], + "canBundleCrossConnect": true + }, + "bundleCrossConnectChargeId": "65eff1e96d38598ce3cf6247" + } + } + } + }, + "404": { + "description": "Throws an error for an invalid DCF.", + "content": { + "application/json": { + "example": { + "error": { + "statusCode": "404,", + "name": "Error", + "message": "There is no method to handle GET /v2/data-center-facilit/invalid" + } + }, + "schema": { + "$ref": "#/components/schemas/NotFoundErrorResponseSchema" + } + } + } + } + } + } + }, + "/api/user/{username}": { + "get": { + "parameters": [ + { + "name": "username", + "description": "", + "in": "path", + "required": true, + "schema": { + "type": "string", + "example": "stan" + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "example": { + "id": "58980a25a77b4d7bf459d100", + "username": "stella", + "name": "Stella", + "email": "stella@example.com" + } + } + } + } + }, + "tags": ["Users"], + "description": "Retrieve user account details.", + "operationId": "GetUser", + "summary": "Get User" + }, + "post": { + "parameters": [ + { + "name": "username", + "description": "", + "in": "path", + "required": true, + "schema": { + "type": "string", + "example": "stan" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "tags": "", + "avatar": "", + "background": "", + "company.address": "", + "company.businessType": "", + "company.city": "", + "company.clientId": "", + "company.companySize": "", + "company.dateFounded": "", + "company.email": "", + "company.fax": "", + "company.first": "", + "company.industry": "", + "company.last": "", + "company.markets": "", + "company.phone": "", + "company.privacy.community.blackListIds": [], + "company.privacy.community.whiteListIds": [], + "company.privacy.network.blackListIds": [], + "company.privacy.network.whiteListIds": [], + "company.regionalInternetRegistry": "", + "company.state": "", + "company.website": "", + "company.zip": "", + "headline": "", + "location": "", + "name": "", + "optIntoMarketingEmail": false, + "phone": "", + "role": "", + "settings": {}, + "summary": "" + }, + "properties": { + "tags": { + "type": "string" + }, + "avatar": { + "description": "An avatar URL for this user. This _must_ be the same URL as provided by a [File Upload][].", + "type": "string" + }, + "background": { + "type": "string" + }, + "company.address": { + "type": "string" + }, + "company.businessType": { + "type": "string" + }, + "company.city": { + "type": "string" + }, + "company.clientId": { + "type": "string" + }, + "company.companySize": { + "type": "string" + }, + "company.dateFounded": { + "type": "string" + }, + "company.email": { + "type": "string" + }, + "company.fax": { + "type": "string" + }, + "company.first": { + "type": "string" + }, + "company.industry": { + "type": "string" + }, + "company.last": { + "type": "string" + }, + "company.markets": { + "type": "string" + }, + "company.phone": { + "type": "string" + }, + "company.privacy.community.blackListIds": { + "description": "list of company ids" + }, + "company.privacy.community.whiteListIds": { + "description": "list of company ids" + }, + "company.privacy.network.blackListIds": { + "description": "list of company ids" + }, + "company.privacy.network.whiteListIds": { + "description": "list of company ids" + }, + "company.regionalInternetRegistry": { + "type": "string" + }, + "company.state": { + "type": "string" + }, + "company.website": { + "type": "string" + }, + "company.zip": { + "type": "string" + }, + "headline": { + "type": "string" + }, + "location": { + "type": "string" + }, + "name": { + "description": "The new name for this user account", + "type": "string" + }, + "optIntoMarketingEmail": { + "type": "boolean" + }, + "phone": { + "type": "string" + }, + "role": { + "type": "string" + }, + "settings": { + "description": "Settings object, corresponding with the settings retrieved from the GET method.", + "properties": {}, + "type": "object" + }, + "summary": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "example": { + "id": "58980a25a77b4d7bf459d100", + "username": "stella", + "name": "Stella", + "email": "stella@example.com" + } + } + } + } + }, + "tags": ["Users"], + "description": "Update user account details.", + "operationId": "UpdateUser", + "summary": "Update user" + } + }, + "/api/company": { + "put": { + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": {} + } + }, + "summary": "Create a company", + "operationId": "Create-a-company", + "description": "", + "tags": ["Companies"], + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CompanyModel" + } + } + } + } + } + }, + "/api/company/{username}/memberships/{targetUsername}/roles/{roleName}": { + "delete": { + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": {} + } + }, + "summary": "Remove role from user", + "operationId": "Remove-role-from-user", + "description": "Remove a role from a user within a given company.", + "tags": ["Companies"], + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The username of the company to join.", + "required": true, + "example": "acmeinc", + "schema": { + "type": "string" + } + }, + { + "name": "targetUsername", + "in": "path", + "description": "The username of the user to respond to.", + "required": true, + "example": "meg", + "schema": { + "type": "string" + } + }, + { + "name": "roleName", + "in": "path", + "description": "The role to apply to or remove from the user.", + "required": true, + "example": "ADMIN", + "schema": { + "type": "string" + } + } + ] + }, + "put": { + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": {} + } + }, + "summary": "Add role to user", + "operationId": "Add-role-to-user", + "description": "Add a role to a user within a given company.", + "tags": ["Companies"], + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The username of the company to join.", + "required": true, + "example": "acmeinc", + "schema": { + "type": "string" + } + }, + { + "name": "targetUsername", + "in": "path", + "description": "The username of the user to respond to.", + "required": true, + "example": "meg", + "schema": { + "type": "string" + } + }, + { + "name": "roleName", + "in": "path", + "description": "The role to apply to or remove from the user.", + "required": true, + "example": "ADMIN", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/company/{username}/memberships/{targetUsername}": { + "post": { + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": {} + } + }, + "summary": "Update user role state", + "operationId": "Update-user-role-state", + "description": "Company membership requests can be in one of the following states:\n- INACTIVE - Request made by either company or user.\n- ACTIVE - Request accepted and they are a member of the company.\n- DENIED - Request denied by the company.\n- CANCELLED - Request cancelled by either company or user.", + "tags": ["Companies"], + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The username of the company.", + "required": true, + "example": "acmeinc", + "schema": { + "type": "string" + } + }, + { + "name": "targetUsername", + "in": "path", + "description": "The username of the user to modify.", + "required": true, + "example": "meg", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "example": { + "state": "ACTIVE" + }, + "schema": { + "type": "object", + "properties": { + "state": { + "type": "string", + "description": "The new state for this user; `INACTIVE`, `ACTIVE`, `DENIED`, or `CANCELLED`." + } + } + } + } + } + } + }, + "delete": { + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "example": {} + } + } + } + }, + "summary": "Remove a user from a company", + "operationId": "Remove-a-user-from-a-company", + "description": "", + "tags": ["Companies"], + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The username of the company.", + "required": true, + "example": "acmeinc", + "schema": { + "type": "string" + } + }, + { + "name": "targetUsername", + "in": "path", + "description": "The username of the user to modify.", + "required": true, + "example": "meg", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/company/{username}/memberships": { + "delete": { + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": {} + } + }, + "summary": "Leave a Company", + "operationId": "Leave-a-Company", + "description": "Removes the authenticated user from the company.", + "tags": ["Companies"], + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The username of the company to leave.", + "required": true, + "example": "acmeinc", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/company/{companyName}/ports/orders": { + "put": { + "parameters": [ + { + "description": "Username of the data center facility.", + "in": "path", + "example": "supernetpa4", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "speed", + "portName", + "paymentType", + "dataCenterFacility", + "durationUnit" + ], + "properties": { + "paymentType": { + "type": "string", + "enum": ["plan", "creditcard", "invoice"], + "description": "The payment method used." + }, + "billingId": { + "type": "string", + "description": "The ID of the plan subscription. Only required when paymentType is 'plan'." + }, + "paymentTransactionId": { + "type": "string", + "description": "The ID of the payment transaction. Only required when paymentType is 'creditcard'." + }, + "dataCenterFacility": { + "type": "string", + "description": "The username of the data center facility." + }, + "speed": { + "type": "string", + "description": "The port speed in Mbps, e.g., 1000 = 1Gbps. 10000 = 10Gbps. Must be >= 100." + }, + "portName": { + "type": "string", + "description": "The name of the port" + }, + "durationUnit": { + "type": "string", + "default": "y", + "enum": ["m", "y"], + "description": "Set to `m` if the Data Center accepts month-to-month port orders." + }, + "bundleCrossConnect": { + "type": "boolean", + "description": "Set to `true` to have the Cross Connect add-on with your port if your Data Center supports this.\nOnly available in a 12 month contract." + }, + "discountCode": { + "type": "string", + "description": "Apply promotion or partner code." + } + } + }, + "examples": { + "Port": { + "summary": "Port with 1Gbps for 1 year", + "value": { + "dataCenterFacility": "demodatacenter", + "speed": 1000, + "portName": "Demo Port", + "paymentType": "invoice", + "durationUnit": "y" + } + }, + "Port-Monthly": { + "summary": "Port with 1Gbps for 1 month", + "description": "The month-to-month port offering is only available at On-Net Data Centers", + "value": { + "dataCenterFacility": "demodatacenter", + "speed": 1000, + "portName": "Demo Port", + "paymentType": "invoice", + "durationUnit": "m" + } + }, + "Port-with-Cross-Connect": { + "summary": "Port with 1Gbps and CrossConnect Add-on for 1 year", + "description": "Only available in a 12 month contract and Data Centers that support this", + "value": { + "dataCenterFacility": "demodatacenter", + "speed": 1000, + "portName": "Demo Port", + "paymentType": "invoice", + "durationUnit": "y", + "bundleCrossConnect": true + } + } + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "Port": { + "summary": "Port with 1Gbps for 1 year", + "value": { + "id": "66e28efa04a4727d5387da09", + "portName": "Demo Port", + "speed": { + "value": 1000, + "name": "1000 Mbps" + }, + "paymentType": "invoice", + "discountId": null, + "billingId": "66e28efa04a4727d5387da06", + "externalId": null, + "salesRecordId": null, + "paymentTransactionId": null, + "payg": true, + "status": "created", + "loaStatus": "TODO", + "isEdgePort": false, + "cancelled": false, + "edgePayload": null, + "requestSource": "CONSOLE_API", + "createdBy": "", + "tags": [], + "type": "PHYSICAL", + "isManualCreate": false, + "dataCenterFacilityId": "5a94a7e2091e410012cdf0b4", + "metroId": "21ab4746f3ba6c3462def3e8", + "companyId": "5d4d056242fbd3000ab4c01d", + "crossConnectId": null, + "deleted": false, + "deletedAt": null, + "createdAt": "2024-09-12T06:49:30.052Z", + "updatedAt": "2024-09-12T06:49:30.354Z", + "durationUnit": "y", + "dataCenterFacility": { + "dataCenterFacility": { + "airportCodes": [], + "speeds": [ + { + "name": "1000 Mbps", + "value": 1000 + } + ], + "metroId": "21ab4746f3ba6c3462def3e8", + "ready": true, + "id": "05a75ed0-b35b-46bf-8019-22b0d2701913", + "nniReady": true, + "brandId": "5b4bda127abfb30014023a0b", + "canBundleCrossConnect": false + }, + "overviewImage": null, + "businessRegistrationNumber": null, + "signedCompanyRefId": null, + "accountManagerEmail": null, + "accountManagerId": null, + "createdAt": "2018-02-27T00:35:46.210Z", + "updatedAt": "2024-08-30T01:32:52.940Z", + "username": "demodatacenter", + "deletedAt": null, + "deleted": false, + "verified": true, + "tags": [], + "status": "ACTIVE", + "displayOrder": -299, + "groups": [], + "location": null, + "summary": "gggg", + "headline": null, + "background": null, + "avatarId": "5bfcd34eeed214000a023674", + "name": "Demo Data Center", + "type": "DATA_CENTER_FACILITY", + "popIds": ["05a75ed0-b35b-46bf-8019-22b0d2701913"], + "provider": ["PCCWGLOBAL"], + "destinationPortOnly": false, + "categories": [], + "nnis": null, + "isCloudProvider": false, + "verifiedIdentity": false, + "selectiveQinQTunnelProvider": [], + "bundleCrossConnectChargeId": null, + "signedCompanyVerified": false, + "companies": [], + "id": "5a94a7e2091e410012cdf0b4", + "online": false + }, + "metro": { + "name": "London", + "code": "LHR", + "country": "de", + "rir": "RIPE", + "regionIds": ["5a370b288f220300127f834d"], + "id": "21ab4746f3ba6c3462def3e8", + "deletedAt": null, + "createdAt": "2017-12-18T00:28:54.074Z", + "updatedAt": "2020-07-10T03:47:25.960Z", + "logo": null, + "description": "", + "ready": true, + "canCreateController": false, + "deleted": false, + "tags": [] + }, + "capabilities": {} + } + }, + "Port-Monthly": { + "summary": "Port with 1Gbps for 1 month", + "value": { + "id": "66e2929204a4727d5387dd33", + "portName": "Demo Port", + "speed": { + "value": 1000, + "name": "1000 Mbps" + }, + "paymentType": "invoice", + "discountId": null, + "billingId": "66e2929104a4727d5387dd30", + "externalId": null, + "salesRecordId": null, + "paymentTransactionId": null, + "payg": true, + "status": "created", + "loaStatus": "TODO", + "isEdgePort": false, + "cancelled": false, + "edgePayload": null, + "requestSource": "CONSOLE_API", + "createdBy": "", + "tags": [], + "type": "PHYSICAL", + "isManualCreate": false, + "dataCenterFacilityId": "5af90d4548ba7200120a194b", + "metroId": "5afa74accf15620012b981d6", + "companyId": "5d4d056242fbd3000ab4c01d", + "crossConnectId": null, + "deleted": false, + "deletedAt": null, + "createdAt": "2024-09-12T07:04:49.817Z", + "updatedAt": "2024-09-12T07:04:50.118Z", + "durationUnit": "m", + "dataCenterFacility": { + "dataCenterFacility": { + "nniReady": true, + "airportCodes": [], + "speeds": [ + { + "name": "1000 Mbps", + "value": 1000 + } + ], + "metroId": "5afa74accf15620012b981d6", + "ready": true, + "id": null, + "brandId": "603db6d3462e9c0014b9e430", + "canBundleCrossConnect": true + }, + "overviewImage": null, + "businessRegistrationNumber": null, + "signedCompanyRefId": null, + "accountManagerEmail": null, + "accountManagerId": null, + "createdAt": "2018-05-14T04:15:01.311Z", + "updatedAt": "2024-08-30T04:04:28.092Z", + "username": "demodatacenter", + "popIds": [ + "9424e0a3-3793-410b-8871-fb2a76bdc767", + "bd473460-8567-4dd4-9164-1a3e7648e760" + ], + "deletedAt": null, + "deleted": false, + "verified": false, + "tags": ["monthly-ports"], + "status": "ACTIVE", + "displayOrder": -299, + "groups": [], + "location": null, + "summary": "", + "headline": null, + "background": null, + "avatarId": "66cc25daa4b6ec32122f38f3", + "name": "Demo Data Center", + "type": "DATA_CENTER_FACILITY", + "verifiedIdentity": true, + "provider": ["PCCWGLOBAL"], + "destinationPortOnly": false, + "categories": [], + "nnis": null, + "isCloudProvider": false, + "bundleCrossConnectChargeId": "62df4e2d7ce573001546fdcc", + "signedCompanyVerified": false, + "selectiveQinQTunnelProvider": [], + "companies": [], + "id": "5af90d4548ba7200120a194b", + "online": false + }, + "metro": { + "name": "Tokyo", + "code": "NRT", + "country": "jp", + "rir": "ARIN", + "regionIds": ["5a370b348f220300127f834e"], + "id": "5afa74accf15620012b981d6", + "deletedAt": null, + "createdAt": "2018-05-15T05:48:28.821Z", + "updatedAt": "2020-12-14T00:21:42.766Z", + "deleted": false, + "tags": [], + "canCreateController": false, + "ready": true + }, + "capabilities": {} + } + }, + "Port-with-Cross-Connect": { + "summary": "Port with 1Gbps and CrossConnect Add-on for 1 year", + "value": { + "id": "66e29a3e04a4727d5387e602", + "portName": "Demo Port", + "speed": { + "value": 1000, + "name": "1000 Mbps" + }, + "paymentType": "invoice", + "discountId": null, + "billingId": "66e29a3e04a4727d5387e5ff", + "externalId": null, + "salesRecordId": null, + "paymentTransactionId": null, + "payg": true, + "status": "created", + "loaStatus": "TODO", + "isEdgePort": false, + "cancelled": false, + "edgePayload": null, + "requestSource": "CONSOLE_API", + "createdBy": "", + "tags": [], + "type": "PHYSICAL", + "isManualCreate": false, + "dataCenterFacilityId": "5af90d4548ba7200120a194b", + "metroId": "5afa74accf15620012b981d6", + "companyId": "5d4d056242fbd3000ab4c01d", + "crossConnectId": "34c9f4e5-7838-4372-abc4-6e04f6aac9a6", + "deleted": false, + "deletedAt": null, + "createdAt": "2024-09-12T07:37:34.478Z", + "updatedAt": "2024-09-12T07:37:34.798Z", + "durationUnit": "y", + "dataCenterFacility": { + "dataCenterFacility": { + "nniReady": true, + "airportCodes": [], + "speeds": [ + { + "name": "1000 Mbps", + "value": 1000 + } + ], + "metroId": "5afa74accf15620012b981d6", + "ready": true, + "id": null, + "brandId": "603db6d3462e9c0014b9e430", + "canBundleCrossConnect": true + }, + "overviewImage": null, + "businessRegistrationNumber": null, + "signedCompanyRefId": null, + "accountManagerEmail": null, + "accountManagerId": null, + "createdAt": "2018-05-14T04:15:01.311Z", + "updatedAt": "2024-08-30T04:04:28.092Z", + "username": "demodatacenter", + "popIds": [ + "9424e0a3-3793-410b-8871-fb2a76bdc767", + "bd473460-8567-4dd4-9164-1a3e7648e760" + ], + "deletedAt": null, + "deleted": false, + "verified": false, + "tags": ["monthly-ports"], + "status": "ACTIVE", + "displayOrder": -299, + "groups": [], + "location": null, + "summary": "", + "headline": null, + "background": null, + "avatarId": "66cc25daa4b6ec32122f38f3", + "name": "Demo Data Center", + "type": "DATA_CENTER_FACILITY", + "verifiedIdentity": true, + "provider": ["PCCWGLOBAL"], + "destinationPortOnly": false, + "categories": [], + "nnis": null, + "isCloudProvider": false, + "bundleCrossConnectChargeId": "62df4e2d7ce573001546fdcc", + "signedCompanyVerified": false, + "selectiveQinQTunnelProvider": [], + "companies": [], + "id": "5af90d4548ba7200120a194b", + "online": false + }, + "metro": { + "name": "Tokyo", + "code": "NRT", + "country": "jp", + "rir": "ARIN", + "regionIds": ["5a370b348f220300127f834e"], + "id": "5afa74accf15620012b981d6", + "deletedAt": null, + "createdAt": "2018-05-15T05:48:28.821Z", + "updatedAt": "2020-12-14T00:21:42.766Z", + "deleted": false, + "tags": [], + "canCreateController": false, + "ready": true + }, + "capabilities": {} + } + } + }, + "schema": { + "$ref": "#/components/schemas/Port_orderModel" + } + } + }, + "description": "OK", + "headers": {} + }, + "400": { + "description": "Error", + "content": { + "application/json": { + "examples": { + "cannot-bundle-cross-connect": { + "summary": "cannot bundle CrossConnect", + "value": { + "code": 400, + "message": "Selected DCF does not support bundle cross connect" + } + }, + "bundle-cross-connect-charge-required": { + "summary": "bundle CrossConnect charge required", + "value": { + "code": 400, + "message": "A bundleCrossConnectChargeId is required for a DCF which supports bundled cross connect" + } + } + }, + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + } + } + }, + "headers": {} + } + }, + "tags": ["Port Orders"], + "description": "A port order is created in a 'dataCenterFacility'.\n\nPlease take note about the different LOA lead times for On-net & Extended (Off-net) data centers.\\\n\\\nOn-net: 24 hours.\\\nExtended: Around 4 to 6 weeks.\n\n### Port Order Status Flow\n\n1. ***created*** - The initial status when this operation is called.\n2. ***processing*** - Reserving a port / the system will select the next available port.\n3. ***allocated*** - The status once the port is successfully ordered, during this status the cross connect will be installed by the Data Centner.\n4. ***loa_sent*** - (Optional) The status once the LOA was uploaded to the port and the customer can install the Cross Connect.\n5. ***setup_xc*** - (Optional) Setup Cross Connect.\n6. ***done*** - The status once the order has been completed and the order is moved to a port.\n\n**Note:** The 'creditcard' payment type is only supported via the Console\nConnect web application. When using this payment type, you must also include 'paymentTransactionId'\nproperty in the request body.\n", + "operationId": "CreatePortOrder", + "summary": "Create a port order/reservation" + }, + "get": { + "parameters": [ + { + "description": "The username of the company that the order is for. You can find your `companyName` by querying ***[Auth](#tag/Auth/operation/GetLoggedInUser)*** API under `companies` and look for `username`.\n", + "in": "path", + "example": "samplecompanyname", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "results": [ + { + "id": "66ac8123309e43469579b637", + "portName": "Sample Port Name", + "message": null, + "dcpCompanyId": null, + "locationId": null, + "speed": { + "value": 1000, + "name": "1000 Mbps" + }, + "requestedLocation": null, + "paymentType": "creditcard", + "createdPortId": "66ac8136f8ff98229a26f954", + "portId": null, + "popId": "199xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "billingId": "66ac818a69e3e647487502a7", + "externalId": null, + "salesRecordId": null, + "paymentTransactionId": null, + "payg": false, + "status": "done", + "isEdgePort": false, + "cancelled": false, + "cancelledAt": null, + "loaSentAt": null, + "edgePayload": null, + "statusDetail": "", + "updatedBy": "workflowengine", + "createdBy": "someone", + "deletedBy": null, + "type": "PHYSICAL", + "dataCenterFacilityId": "66ac81abba800b191bb7bfc1", + "metroId": "66ac80e45ead92352fa507f1", + "companyId": "66ac81f01513f510a25fb0f9", + "deleted": false, + "deletedAt": null, + "createdAt": "2019-10-24T12:25:30.926Z", + "updatedAt": "2019-10-29T15:09:05.579Z", + "cancelledBy": null, + "company": { + "officeAddress": null, + "system": { + "welcomeMessage": null + }, + "company": { + "industry": null, + "partnerType": null, + "companySize": null, + "dateFounded": null, + "clientId": null, + "first": null, + "last": null, + "address": null, + "city": null, + "state": null, + "zip": null, + "phone": null, + "fax": null, + "website": "pccwglobal.com", + "businessType": "Internal", + "registeredName": "PCCW Global Limited", + "addresses": [ + { + "geo": { + "type": "Point", + "coordinates": [] + }, + "registered": true, + "address": "123/F, Address street", + "city": "City", + "state": null, + "zip": "123456", + "country": "GB", + "email": null, + "phone": null + } + ], + "isIoTDemoCompany": false + }, + "cloudProviderDetails": { + "asn": { + "range": [] + }, + "bgpAuthority": "PCCWGLOBAL", + "companyType": "DCP" + }, + "stats": { + "members": 24, + "interconnections": 0, + "followers": 0, + "following": 0, + "privateArticles": 0, + "privateEvents": 0, + "privatePosts": 0, + "articles": 1, + "events": 0, + "posts": 0 + }, + "overviewImage": null, + "accountManagerEmail": null, + "accountManagerId": null, + "createdAt": "2019-10-16T09:24:25.171Z", + "updatedAt": "2024-07-31T13:49:54.777Z", + "username": "samplecompanyname", + "deletedAt": null, + "deleted": false, + "verified": true, + "tags": ["Analytics"], + "status": "ACTIVE", + "displayOrder": 0, + "groups": [], + "location": null, + "summary": "", + "headline": null, + "background": "667791fc324b084736294895", + "avatarId": "5f879e24ff0c370014a81528", + "name": "My Sample Company", + "type": "COMPANY", + "oldAvatarId": "66ac82ffd4d834545f0cdcf2", + "verifiedIdentity": true, + "portsActive": 4, + "categories": ["NaaS", "Enterprise"], + "isCloudProvider": false, + "signedCompanyRefId": 46, + "signedCompanyVerified": true, + "businessRegistrationNumber": "11111111-222-33-44-5", + "companies": [], + "id": "66ac81f01513f510a25fb0f9", + "online": false + }, + "dataCenterFacility": { + "system": { + "welcomeMessage": null + }, + "company": { + "privacy": { + "network": { + "mode": "PUBLIC", + "blackListIds": [], + "whiteListIds": [] + }, + "community": { + "mode": "PUBLIC", + "blackListIds": [], + "whiteListIds": [] + } + }, + "industry": null, + "partnerType": null, + "companySize": null, + "dateFounded": null, + "registeredName": null, + "businessRegistrationCertReference": null, + "businessRegistrationCertUploadedAt": null, + "businessRegistrationCertRejectedReason": null, + "clientId": null, + "first": null, + "last": null, + "address": null, + "city": null, + "state": null, + "zip": null, + "phone": null, + "fax": null, + "addresses": [ + { + "geo": { + "type": "Point", + "coordinates": [] + }, + "registered": false, + "address": "456/G, Address street", + "city": "London", + "state": null, + "zip": null, + "country": "GB", + "email": null, + "phone": null + } + ], + "businessType": "Data Center", + "regionalInternetRegistry": [], + "businessRegistrationCertVerified": "UNVERIFIED", + "website": "www.website.com", + "emailDomains": [], + "businessDevelopmentManagerTypePreference": "UNSPECIFIED", + "isIoTDemoCompany": false + }, + "dataCenterFacility": { + "airportCodes": ["LON"], + "speeds": [ + { + "name": "1000 Mbps", + "value": 1000 + }, + { + "name": "10000 Mbps", + "value": 10000 + }, + { + "name": "100000 Mbps", + "value": 100000 + } + ], + "metroId": "66ac80e45ead92352fa507f1", + "ready": true, + "id": null, + "nniReady": true, + "brandId": "66ac83bf966e5c355cc41000", + "canBundleCrossConnect": true + }, + "cloudProviderDetails": { + "asn": { + "range": [] + }, + "bgpAuthority": "PCCWGLOBAL", + "companyType": "DCP" + }, + "stats": { + "members": 0, + "interconnections": 0, + "followers": 7, + "following": 0, + "privateArticles": 0, + "privateEvents": 0, + "privatePosts": 0, + "articles": 0, + "events": 0, + "posts": 0 + }, + "overviewImage": null, + "businessRegistrationNumber": null, + "signedCompanyRefId": null, + "accountManagerEmail": null, + "accountManagerId": null, + "createdAt": "2018-02-28T23:22:52.293Z", + "updatedAt": "2024-06-05T23:24:35.392Z", + "username": "sampledcf-username", + "deletedAt": null, + "deleted": false, + "verified": true, + "tags": ["monthly-ports"], + "status": "ACTIVE", + "displayOrder": -299, + "groups": [], + "location": null, + "summary": null, + "headline": "", + "background": null, + "avatarId": "66ac846e02981dacc5826ab1", + "name": "Sample DCF Name", + "type": "DATA_CENTER_FACILITY", + "popIds": [ + "199xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "22cxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" + ], + "costbookLocationId": "66ac84b20f0a090dcaf087ed", + "provider": ["PCCWGLOBAL"], + "verifiedIdentity": false, + "categories": [], + "isCloudProvider": false, + "l3CostbookLocationId": "66ac84bed964dba373e3df1f", + "nnis": [], + "bundleCrossConnectChargeId": "66ac84cb55ab153cec8787cd", + "signedCompanyVerified": false, + "companies": [], + "id": "66ac81abba800b191bb7bfc1", + "online": false + }, + "metro": { + "name": "London", + "code": "LHR", + "country": "gb", + "regionIds": ["66ac85577fee5d6f5c492340"], + "id": "66ac80e45ead92352fa507f1", + "deletedAt": null, + "createdAt": "2018-02-14T00:34:10.227Z", + "updatedAt": "2018-02-14T00:34:20.774Z", + "logo": null, + "description": "London", + "ready": true, + "canCreateController": false, + "deleted": false + }, + "capabilities": {} + } + ] + } + } + }, + "schema": { + "$ref": "#/components/schemas/Port_ordersModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Port Orders"], + "description": "Get all port orders of a company\n\nImportant Notes:\n * This is where you can find all the port orders you have created.\n * You can also find the `createdPortId` here which you can use to query for a port by its order ID. See ***[Read port details](#tag/Ports/operation/GetPort)*** API and use the `createdPortId` in **{portId}** path parameter\n", + "operationId": "GetAllPortOrderDetails", + "summary": "Get all order details" + } + }, + "/api/company/{companyName}/ports/orders/{orderId}": { + "get": { + "parameters": [ + { + "description": "The username of the company that the order is for.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the order.", + "in": "path", + "example": "56d691309a90128d55831db1", + "name": "orderId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "billingId": "56d691309a90128d55831db2", + "cancelled": false, + "isEdgePort": false, + "edgePayload": {}, + "cancelledAt": "1970-01-01T00:00:00.000Z", + "cancelledBy": null, + "company": { + "tags": [], + "__v": 0, + "avatar": null, + "avatarId": null, + "background": null, + "capabilities": { + "layer2": false, + "layer2Metros": [], + "layer2Regions": [], + "layer3": false, + "layer3Metros": [], + "layer3Regions": [] + }, + "companies": [], + "company": { + "address": null, + "addresses": [], + "businessDevelopmentManagerTypePreference": "UNSPECIFIED", + "businessRegistrationCertReference": null, + "businessRegistrationCertRejectedReason": null, + "businessRegistrationCertUploadedAt": null, + "businessRegistrationCertVerified": "UNVERIFIED", + "businessType": null, + "city": null, + "clientId": null, + "companySize": null, + "dateFounded": null, + "emailDomains": ["example.com"], + "fax": null, + "first": null, + "industry": null, + "isSDWAN": false, + "last": null, + "parentIds": [], + "phone": null, + "privacy": { + "community": { + "blackListIds": [], + "mode": "PUBLIC", + "whiteListIds": [] + }, + "network": { + "blackListIds": [], + "mode": "PUBLIC", + "whiteListIds": [] + } + }, + "regionalInternetRegistry": [], + "registeredName": null, + "state": null, + "website": null, + "zip": null + }, + "createdAt": "2017-02-06T23:20:46.291Z", + "defaultPaymentType": null, + "deleted": false, + "deletedAt": null, + "displayOrder": -299, + "groups": [], + "headline": null, + "id": "58980a25a77b4d7bf459d200", + "isSupport": false, + "legalEntityId": null, + "linkUserCompany": {}, + "location": null, + "name": "Company 1", + "online": false, + "optIntoMarketingEmail": false, + "overviewImage": null, + "phone": null, + "popIds": [], + "stats": { + "articles": 0, + "events": 0, + "followers": 0, + "following": 0, + "interconnections": 0, + "members": 1, + "posts": 0, + "privateArticles": 0, + "privateEvents": 0, + "privatePosts": 0 + }, + "status": "ACTIVE", + "summary": null, + "system": { + "welcomeMessage": null + }, + "type": "COMPANY", + "updatedAt": "2017-02-06T23:20:46.291Z", + "username": "company1", + "verified": true, + "verifiedIdentity": true + }, + "controller": { + "asn": null, + "cerAsn": null, + "cerIp": { + "ipv4": null, + "ipv6": null + }, + "id": null, + "ip": { + "ipv4": null, + "ipv6": null + }, + "serviceLayerId": null, + "vlan": null + }, + "createdAt": "2016-03-02T07:07:28.195Z", + "createdBy": "stan", + "deleted": false, + "deletedAt": "1970-01-01T00:00:00.000Z", + "deletedBy": null, + "id": "56d691309a90128d55831db1", + "locationId": null, + "crossConnectId": null, + "message": null, + "metro": { + "country": "USA", + "createdAt": "2016-02-12T09:01:33.840Z", + "deleted": false, + "deletedAt": null, + "id": "1232413986c08c061dd8c45f", + "name": "SJC", + "updatedAt": "2016-02-12T09:01:33.840Z" + }, + "port": { + "activeChangedAt": "2016-03-02T07:07:27.147Z", + "createdAt": "2016-03-02T07:07:27.148Z", + "dataCenterFacilityId": "5126c9f1111e15a24a066130", + "deleted": false, + "deletedAt": "1970-01-01T00:00:00.000Z", + "id": "56d6912f9a90128d55831da8", + "ip": { + "ipv4": null, + "ipv6": null + }, + "locationId": "b3f5ac21-fec1-4418-9e1a-709d48da59fa", + "metroId": "1232413986c08c061dd8c45f", + "name": "PORT_1", + "portId": null, + "speed": 1000, + "status": "UNKNOWN", + "type": "PHYSICAL_NSP", + "updatedAt": "2016-03-02T07:07:27.148Z", + "vlan": null + }, + "portName": "PORT_1", + "speed": { + "name": "1000 Mbps", + "value": 1000 + }, + "status": "created", + "updatedAt": "2016-03-02T07:07:28.195Z", + "updatedBy": null + } + } + }, + "schema": { + "$ref": "#/components/schemas/Port_orderModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Port Orders", "Edge Ports"], + "description": "Get the details of a companies port order", + "operationId": "GetPortOrderDetail", + "summary": "Get order details by ID" + } + }, + "/api/company/{companyName}/ports/orders/{orderId}/{action}(sendloa|loasent)": { + "post": { + "parameters": [ + { + "name": "companyName", + "in": "path", + "description": "The username of the company to take the port order action for.", + "example": "Acme", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "orderId", + "in": "path", + "description": "The port order id you wish to take the LOA action for.", + "example": "56d691301a1a128d55831db2", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "action", + "in": "path", + "description": "The LOA action to implement on the port order.", + "examples": { + "sendloa-action": { + "summary": "Resends the LOA to the user", + "value": "sendloa" + }, + "loasent-action": { + "summary": "Updates port order status to 'loa_sent'", + "value": "loasent" + } + }, + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "billingId": "56d691309a90128d55831db2", + "cancelled": false, + "cancelledAt": "1970-01-01T00:00:00.000Z", + "cancelledBy": null, + "company": { + "tags": [], + "__v": 0, + "avatar": null, + "avatarId": null, + "background": null, + "capabilities": { + "layer2": false, + "layer2Metros": [], + "layer2Regions": [], + "layer3": false, + "layer3Metros": [], + "layer3Regions": [] + }, + "companies": [], + "company": { + "address": null, + "addresses": [], + "businessDevelopmentManagerTypePreference": "UNSPECIFIED", + "businessRegistrationCertReference": null, + "businessRegistrationCertRejectedReason": null, + "businessRegistrationCertUploadedAt": null, + "businessRegistrationCertVerified": "UNVERIFIED", + "businessType": null, + "city": null, + "clientId": null, + "companySize": null, + "dateFounded": null, + "emailDomains": ["example.org"], + "fax": null, + "first": null, + "industry": null, + "isSDWAN": false, + "last": null, + "parentIds": [], + "phone": null, + "privacy": { + "community": { + "blackListIds": [], + "mode": "PUBLIC", + "whiteListIds": [] + }, + "network": { + "blackListIds": [], + "mode": "PUBLIC", + "whiteListIds": [] + } + }, + "regionalInternetRegistry": [], + "registeredName": null, + "state": null, + "website": null, + "zip": null + }, + "createdAt": "2017-02-06T23:20:46.291Z", + "defaultPaymentType": null, + "deleted": false, + "deletedAt": null, + "displayOrder": -299, + "groups": [], + "headline": null, + "id": "58980a25a77b4d7bf459d200", + "isSupport": false, + "legalEntityId": null, + "linkUserCompany": {}, + "location": null, + "name": "Company 1", + "online": false, + "optIntoMarketingEmail": false, + "overviewImage": null, + "phone": null, + "popIds": [], + "stats": { + "articles": 0, + "events": 0, + "followers": 0, + "following": 0, + "interconnections": 0, + "members": 1, + "posts": 0, + "privateArticles": 0, + "privateEvents": 0, + "privatePosts": 0 + }, + "status": "ACTIVE", + "summary": null, + "system": { + "welcomeMessage": null + }, + "type": "COMPANY", + "updatedAt": "2017-02-06T23:20:46.291Z", + "username": "company1", + "verified": true, + "verifiedIdentity": true + }, + "controller": { + "asn": null, + "cerAsn": null, + "cerIp": { + "ipv4": null, + "ipv6": null + }, + "id": null, + "ip": { + "ipv4": null, + "ipv6": null + }, + "serviceLayerId": null, + "vlan": null + }, + "createdAt": "2016-03-02T07:07:28.195Z", + "createdBy": "stan", + "deleted": false, + "deletedAt": "1970-01-01T00:00:00.000Z", + "deletedBy": null, + "id": "56d691309a90128d55831db1", + "locationId": null, + "crossConnectId": null, + "message": null, + "metro": { + "country": "USA", + "createdAt": "2016-02-12T09:01:33.840Z", + "deleted": false, + "deletedAt": null, + "id": "1232413986c08c061dd8c45f", + "name": "SJC", + "updatedAt": "2016-02-12T09:01:33.840Z" + }, + "port": { + "activeChangedAt": "2016-03-02T07:07:27.147Z", + "createdAt": "2016-03-02T07:07:27.148Z", + "dataCenterFacilityId": "5126c9f1111e15a24a066130", + "deleted": false, + "deletedAt": "1970-01-01T00:00:00.000Z", + "id": "56d6912f9a90128d55831da8", + "ip": { + "ipv4": null, + "ipv6": null + }, + "locationId": "b3f5ac21-fec1-4418-9e1a-709d48da59fa", + "metroId": "1232413986c08c061dd8c45f", + "name": "PORT_1", + "portId": null, + "speed": 1000, + "status": "UNKNOWN", + "type": "PHYSICAL_NSP", + "updatedAt": "2016-03-02T07:07:27.148Z", + "vlan": null + }, + "portName": "PORT_1", + "speed": { + "name": "1000 Mbps", + "value": 1000 + }, + "status": "created", + "updatedAt": "2016-03-02T07:07:28.195Z", + "updatedBy": null + } + } + }, + "schema": { + "$ref": "#/components/schemas/Port_orderModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Port Orders"], + "description": "A Letter of Authorisation is required as part of the process to connect to a [port](https://www.consoleconnect.com/help/access-ports/#ports).\n* **sendloa**: Resends the LOA to the user.\n* **loasent**: Updates port order status to 'loa_sent'.\n * **Note**: **loasent** will fail with 409 unless port order status is 'ALLOCATED'.\n", + "operationId": "UpdatePortOrderAction", + "summary": "Perform LOA action on a port order" + } + }, + "/api/company/{companyName}/ports": { + "get": { + "parameters": [ + { + "description": "The username of the company to check the port for.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "deleted", + "description": "Set to `false` to exclude ports with `DELETED` status", + "example": "false", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "results": [ + { + "activeChangedAt": "2016-06-16T06:20:10.640Z", + "asn": { + "asn": "176251", + "createdAt": "2016-06-16T06:20:11.053Z", + "deleted": false, + "deletedAt": null, + "status": "VERIFIED", + "type": "ALLOCATED", + "updatedAt": "2016-06-16T06:20:11.053Z" + }, + "capacity": { + "remaining": 900, + "total": 1000, + "utilised": 100 + }, + "company": { + "tags": [], + "avatar": null, + "avatarId": null, + "background": null, + "companies": null, + "company": { + "address": null, + "addresses": [], + "businessType": null, + "city": null, + "clientId": null, + "companySize": null, + "country": null, + "dateFounded": null, + "email": null, + "emailDomains": [], + "fax": null, + "first": null, + "industry": null, + "last": null, + "markets": {}, + "phone": null, + "regionalInternetRegistry": null, + "state": null, + "website": null, + "zip": null + }, + "createdAt": "2016-06-16T06:20:09.604Z", + "deleted": false, + "deletedAt": null, + "groups": null, + "headline": null, + "id": "5762451982894b9b1b1a5dbc", + "isSupport": false, + "isSynced": null, + "location": null, + "name": "corp", + "online": false, + "phone": null, + "social": null, + "stats": { + "articles": 0, + "events": 0, + "followers": 0, + "following": 0, + "interconnections": 0, + "members": 1, + "posts": 0, + "privateArticles": 0, + "privateEvents": 0, + "privatePosts": 0 + }, + "status": "ACTIVE", + "summary": null, + "type": "COMPANY", + "updatedAt": "2016-06-16T06:20:09.604Z", + "username": "corp", + "verified": false + }, + "companyId": "5762451982894b9b1b1a5dbc", + "connections": [ + { + "id": "5762451d82894b9b1b1a5dd2", + "name": "Sierra", + "status": "ACTIVE" + } + ], + "controllers": [ + { + "activeChangedAt": "2016-06-16T06:20:11.458Z", + "asn": { + "asn": "54321", + "createdAt": "2016-06-16T06:20:11.460Z", + "deleted": false, + "deletedAt": null, + "status": "VERIFIED", + "type": "SYSTEM", + "updatedAt": "2016-06-16T06:20:11.460Z" + }, + "createdAt": "2016-06-16T06:20:11.114Z", + "deleted": false, + "deletedAt": null, + "id": "5762451b82894b9b1b1a5dc6", + "ip": { + "ipv4": "198.51.100.1", + "ipv6": "2001:DB8::1111:1111:1111:1111" + }, + "metro": { + "code": null, + "country": "USA", + "createdAt": "2016-02-12T09:01:33.840Z", + "deleted": false, + "deletedAt": null, + "description": null, + "id": "1232413986c08c061dd8c45f", + "logo": null, + "name": "SJC", + "ready": true, + "regionIds": [], + "updatedAt": "2016-02-12T09:01:33.840Z" + }, + "metroId": "1232413986c08c061dd8c45f", + "name": "corp - Skyla", + "password": "", + "portIds": ["5762451a82894b9b1b1a5dc2"], + "status": "ACTIVE", + "type": "USER", + "updatedAt": "2016-06-16T06:20:11.462Z", + "vlan": 200 + } + ], + "createdAt": "2016-06-16T06:20:10.029Z", + "dataCenterFacility": { + "tags": [], + "avatar": null, + "avatarId": null, + "background": null, + "companies": null, + "company": { + "address": null, + "addresses": [ + { + "address": "11 Great Oaks Boulevard", + "city": "San Jose", + "country": "USA", + "email": "", + "geo": { + "coordinates": [-121.78322, 37.24162], + "type": "Point" + }, + "phone": "", + "primary": true, + "state": "California", + "zip": "95119-1242" + } + ], + "businessType": null, + "city": null, + "clientId": null, + "companySize": null, + "country": null, + "dateFounded": null, + "email": null, + "emailDomains": [], + "fax": null, + "first": null, + "industry": null, + "last": null, + "markets": {}, + "phone": null, + "regionalInternetRegistry": null, + "state": null, + "website": null, + "zip": null + }, + "createdAt": "2015-11-04T06:07:12.785Z", + "dataCenterFacility": { + "id": "b3f5ac21-fec1-4418-9e1a-709d48da59fa", + "metroId": "1232413986c08c061dd8c45f", + "ready": true, + "speeds": [], + "canBundleCrossConnect": true + }, + "deleted": false, + "deletedAt": "1970-01-01T00:00:00.000Z", + "groups": null, + "headline": null, + "id": "5126c9f1111e15a24a066130", + "isSupport": false, + "isSynced": null, + "location": null, + "name": "Equinix - SV1", + "online": false, + "phone": null, + "social": null, + "stats": { + "articles": 0, + "events": 0, + "followers": 0, + "following": 0, + "interconnections": 0, + "members": 0, + "posts": 0, + "privateArticles": 0, + "privateEvents": 0, + "privatePosts": 0 + }, + "status": "ACTIVE", + "summary": null, + "type": "DATA_CENTER_FACILITY", + "updatedAt": "2015-11-04T06:07:13.430Z", + "username": "equinix-sv1", + "verified": true + }, + "dataCenterFacilityId": "5126c9f1111e15a24a066130", + "deleted": false, + "deletedAt": "1970-01-01T00:00:00.000Z", + "id": "5762451a82894b9b1b1a5dc2", + "ip": { + "ipv4": null, + "ipv6": null + }, + "locationId": "b3f5ac21-fec1-4418-9e1a-709d48da59fa", + "crossConnectId": "68696464-b2f7-4c90-a342-293f7385469a", + "metro": { + "code": null, + "country": "USA", + "createdAt": "2016-02-12T09:01:33.840Z", + "deleted": false, + "deletedAt": null, + "description": null, + "id": "1232413986c08c061dd8c45f", + "logo": null, + "name": "SJC", + "ready": true, + "regionIds": [], + "updatedAt": "2016-02-12T09:01:33.840Z" + }, + "metroId": "1232413986c08c061dd8c45f", + "name": "Vicente", + "networkServiceProviderId": null, + "partner": { + "regionNames": [], + "type": "NONE" + }, + "portId": null, + "speed": { + "name": "1000 Mbps", + "value": 1000 + }, + "status": "ACTIVE", + "type": "PHYSICAL", + "updatedAt": "2016-06-16T06:20:11.116Z", + "vlanRanges": [ + { + "end": 3699, + "start": 3600 + } + ] + } + ] + } + } + }, + "schema": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PortModel" + } + } + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Ports"], + "description": "Note: Reading a company’s ports is publicly visible.\n\nA port can be in one of the following states:\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
StatusDescription
ACTIVATINGIn the process of being activated
READYAllocated but awaiting a physical network connection
ACTIVEPort is active
DISABLINGIn the process of being disabled
DISABLEDThe port is disabled
DELETINGIn the process of being deleted
DELETEDThe Port is deleted
UNKNOWNThe status of the port cannot be determined
ONBOARDINGThe port is currently being on-boarded
\n\nIn addition to these states, a port also has the `singleService` flag which indicates that the port is dedicated to a single untagged connection, so no further connections can be created on the port.\n", + "operationId": "GetPortList", + "summary": "List ports" + } + }, + "/api/company/{companyName}/ports/{portId}": { + "delete": { + "parameters": [ + { + "description": "The username of the company to check the port for.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The port id", + "in": "path", + "example": "55767b5652a693344a015744", + "name": "portId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": {} + } + }, + "tags": ["Ports"], + "description": "Note: a port must be disabled using Port Actions before it can be deleted.", + "operationId": "DeletePort", + "summary": "Delete port" + }, + "get": { + "parameters": [ + { + "description": "The username of the company to check the port for.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The port id", + "in": "path", + "example": "55767b5652a693344a015744", + "name": "portId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "activeChangedAt": "2016-06-16T06:20:10.640Z", + "asn": { + "asn": "176251", + "createdAt": "2016-06-16T06:20:11.053Z", + "deleted": false, + "deletedAt": null, + "status": "VERIFIED", + "type": "ALLOCATED", + "updatedAt": "2016-06-16T06:20:11.053Z" + }, + "capacity": { + "remaining": 900, + "total": 1000, + "utilised": 100 + }, + "company": { + "tags": [], + "avatar": null, + "avatarId": null, + "background": null, + "companies": null, + "company": { + "address": null, + "addresses": [], + "businessType": null, + "city": null, + "clientId": null, + "companySize": null, + "country": null, + "dateFounded": null, + "email": null, + "emailDomains": [], + "fax": null, + "first": null, + "industry": null, + "last": null, + "markets": {}, + "phone": null, + "regionalInternetRegistry": null, + "state": null, + "website": null, + "zip": null + }, + "createdAt": "2016-06-16T06:20:09.604Z", + "deleted": false, + "deletedAt": null, + "groups": null, + "headline": null, + "id": "5762451982894b9b1b1a5dbc", + "isSupport": false, + "isSynced": null, + "location": null, + "name": "corp", + "online": false, + "phone": null, + "social": null, + "stats": { + "articles": 0, + "events": 0, + "followers": 0, + "following": 0, + "interconnections": 0, + "members": 1, + "posts": 0, + "privateArticles": 0, + "privateEvents": 0, + "privatePosts": 0 + }, + "status": "ACTIVE", + "summary": null, + "type": "COMPANY", + "updatedAt": "2016-06-16T06:20:09.604Z", + "username": "corp", + "verified": false + }, + "companyId": "5762451982894b9b1b1a5dbc", + "connections": [ + { + "id": "5762451d82894b9b1b1a5dd2", + "name": "Sierra", + "status": "ACTIVE" + } + ], + "controllers": [ + { + "activeChangedAt": "2016-06-16T06:20:11.458Z", + "asn": { + "asn": "54321", + "createdAt": "2016-06-16T06:20:11.460Z", + "deleted": false, + "deletedAt": null, + "status": "VERIFIED", + "type": "SYSTEM", + "updatedAt": "2016-06-16T06:20:11.460Z" + }, + "createdAt": "2016-06-16T06:20:11.114Z", + "deleted": false, + "deletedAt": null, + "id": "5762451b82894b9b1b1a5dc6", + "ip": { + "ipv4": "198.51.100.1", + "ipv6": "2001:DB8::1111:1111:1111:1111" + }, + "metro": { + "code": null, + "country": "USA", + "createdAt": "2016-02-12T09:01:33.840Z", + "deleted": false, + "deletedAt": null, + "description": null, + "id": "1232413986c08c061dd8c45f", + "logo": null, + "name": "SJC", + "ready": true, + "regionIds": [], + "updatedAt": "2016-02-12T09:01:33.840Z" + }, + "metroId": "1232413986c08c061dd8c45f", + "name": "corp - Skyla", + "password": "", + "portIds": ["5762451a82894b9b1b1a5dc2"], + "status": "ACTIVE", + "type": "USER", + "updatedAt": "2016-06-16T06:20:11.462Z", + "vlan": 200 + } + ], + "createdAt": "2016-06-16T06:20:10.029Z", + "dataCenterFacility": { + "tags": [], + "avatar": null, + "avatarId": null, + "background": null, + "companies": null, + "company": { + "address": null, + "addresses": [ + { + "address": "11 Great Oaks Boulevard", + "city": "San Jose", + "country": "USA", + "email": "", + "geo": { + "coordinates": [-121.78322, 37.24162], + "type": "Point" + }, + "phone": "", + "primary": true, + "state": "California", + "zip": "95119-1242" + } + ], + "businessType": null, + "city": null, + "clientId": null, + "companySize": null, + "country": null, + "dateFounded": null, + "email": null, + "emailDomains": [], + "fax": null, + "first": null, + "industry": null, + "last": null, + "markets": {}, + "phone": null, + "regionalInternetRegistry": null, + "state": null, + "website": null, + "zip": null + }, + "createdAt": "2015-11-04T06:07:12.785Z", + "dataCenterFacility": { + "id": "b3f5ac21-fec1-4418-9e1a-709d48da59fa", + "metroId": "1232413986c08c061dd8c45f", + "ready": true, + "speeds": [], + "canBundleCrossConnect": true + }, + "deleted": false, + "deletedAt": "1970-01-01T00:00:00.000Z", + "groups": null, + "headline": null, + "id": "5126c9f1111e15a24a066130", + "isSupport": false, + "isSynced": null, + "location": null, + "name": "Equinix - SV1", + "online": false, + "phone": null, + "social": null, + "stats": { + "articles": 0, + "events": 0, + "followers": 0, + "following": 0, + "interconnections": 0, + "members": 0, + "posts": 0, + "privateArticles": 0, + "privateEvents": 0, + "privatePosts": 0 + }, + "status": "ACTIVE", + "summary": null, + "type": "DATA_CENTER_FACILITY", + "updatedAt": "2015-11-04T06:07:13.430Z", + "username": "equinix-sv1", + "verified": true + }, + "dataCenterFacilityId": "5126c9f1111e15a24a066130", + "deleted": false, + "deletedAt": "1970-01-01T00:00:00.000Z", + "id": "5762451a82894b9b1b1a5dc2", + "ip": { + "ipv4": null, + "ipv6": null + }, + "locationId": "b3f5ac21-fec1-4418-9e1a-709d48da59fa", + "crossConnectId": "68696464-b2f7-4c90-a342-293f7385469a", + "metro": { + "code": null, + "country": "USA", + "createdAt": "2016-02-12T09:01:33.840Z", + "deleted": false, + "deletedAt": null, + "description": null, + "id": "1232413986c08c061dd8c45f", + "logo": null, + "name": "SJC", + "ready": true, + "regionIds": [], + "updatedAt": "2016-02-12T09:01:33.840Z" + }, + "metroId": "1232413986c08c061dd8c45f", + "name": "Vicente", + "networkServiceProviderId": null, + "partner": { + "regionNames": [], + "type": "NONE" + }, + "portId": null, + "singleService": false, + "speed": { + "name": "1000 Mbps", + "value": 1000 + }, + "status": "ACTIVE", + "type": "PHYSICAL", + "updatedAt": "2016-06-16T06:20:11.116Z", + "vlanRange": [ + { + "from": 3600, + "to": 3699 + } + ] + } + } + }, + "schema": { + "$ref": "#/components/schemas/PortModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Ports", "Edge Ports"], + "description": "Note: Reading a company's port details is publicly visible.", + "operationId": "GetPort", + "summary": "Read port details" + }, + "post": { + "parameters": [ + { + "description": "The username of the company to check the port for.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The port id.", + "in": "path", + "example": "55767b5652a693344a015744", + "name": "portId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": ["name"], + "example": { + "asn": { + "asn": "176252" + }, + "name": "VPort0" + }, + "properties": { + "asn": { + "description": "The ASN to attach to this port.", + "type": "string" + }, + "name": { + "description": "A friendly name for the port", + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "activeChangedAt": "2016-06-16T06:20:10.640Z", + "asn": { + "asn": "176251", + "createdAt": "2016-06-16T06:20:11.053Z", + "deleted": false, + "deletedAt": null, + "status": "VERIFIED", + "type": "ALLOCATED", + "updatedAt": "2016-06-16T06:20:11.053Z" + }, + "capacity": { + "remaining": 900, + "total": 1000, + "utilised": 100 + }, + "company": { + "tags": [], + "avatar": null, + "avatarId": null, + "background": null, + "companies": null, + "company": { + "address": null, + "addresses": [], + "businessType": null, + "city": null, + "clientId": null, + "companySize": null, + "country": null, + "dateFounded": null, + "email": null, + "emailDomains": [], + "fax": null, + "first": null, + "industry": null, + "last": null, + "markets": {}, + "phone": null, + "regionalInternetRegistry": null, + "state": null, + "website": null, + "zip": null + }, + "createdAt": "2016-06-16T06:20:09.604Z", + "deleted": false, + "deletedAt": null, + "groups": null, + "headline": null, + "id": "5762451982894b9b1b1a5dbc", + "isSupport": false, + "isSynced": null, + "location": null, + "name": "corp", + "online": false, + "phone": null, + "social": null, + "stats": { + "articles": 0, + "events": 0, + "followers": 0, + "following": 0, + "interconnections": 0, + "members": 1, + "posts": 0, + "privateArticles": 0, + "privateEvents": 0, + "privatePosts": 0 + }, + "status": "ACTIVE", + "summary": null, + "type": "COMPANY", + "updatedAt": "2016-06-16T06:20:09.604Z", + "username": "corp", + "verified": false + }, + "companyId": "5762451982894b9b1b1a5dbc", + "connections": [ + { + "id": "5762451d82894b9b1b1a5dd2", + "name": "Sierra", + "status": "ACTIVE" + } + ], + "controllers": [ + { + "activeChangedAt": "2016-06-16T06:20:11.458Z", + "asn": { + "asn": "54321", + "createdAt": "2016-06-16T06:20:11.460Z", + "deleted": false, + "deletedAt": null, + "status": "VERIFIED", + "type": "SYSTEM", + "updatedAt": "2016-06-16T06:20:11.460Z" + }, + "createdAt": "2016-06-16T06:20:11.114Z", + "deleted": false, + "deletedAt": null, + "id": "5762451b82894b9b1b1a5dc6", + "ip": { + "ipv4": "198.51.100.1", + "ipv6": "2001:DB8::1111:1111:1111:1111" + }, + "metro": { + "code": null, + "country": "USA", + "createdAt": "2016-02-12T09:01:33.840Z", + "deleted": false, + "deletedAt": null, + "description": null, + "id": "1232413986c08c061dd8c45f", + "logo": null, + "name": "SJC", + "ready": true, + "regionIds": [], + "updatedAt": "2016-02-12T09:01:33.840Z" + }, + "metroId": "1232413986c08c061dd8c45f", + "name": "corp - Skyla", + "password": "", + "portIds": ["5762451a82894b9b1b1a5dc2"], + "status": "ACTIVE", + "type": "USER", + "updatedAt": "2016-06-16T06:20:11.462Z", + "vlan": 200 + } + ], + "createdAt": "2016-06-16T06:20:10.029Z", + "dataCenterFacility": { + "tags": [], + "avatar": null, + "avatarId": null, + "background": null, + "companies": null, + "company": { + "address": null, + "addresses": [ + { + "address": "11 Great Oaks Boulevard", + "city": "San Jose", + "country": "USA", + "email": "", + "geo": { + "coordinates": [-121.78322, 37.24162], + "type": "Point" + }, + "phone": "", + "primary": true, + "state": "California", + "zip": "95119-1242" + } + ], + "businessType": null, + "city": null, + "clientId": null, + "companySize": null, + "country": null, + "dateFounded": null, + "email": null, + "emailDomains": [], + "fax": null, + "first": null, + "industry": null, + "last": null, + "markets": {}, + "phone": null, + "regionalInternetRegistry": null, + "state": null, + "website": null, + "zip": null + }, + "createdAt": "2015-11-04T06:07:12.785Z", + "dataCenterFacility": { + "id": "b3f5ac21-fec1-4418-9e1a-709d48da59fa", + "metroId": "1232413986c08c061dd8c45f", + "ready": true, + "speeds": [], + "canBundleCrossConnect": true + }, + "deleted": false, + "deletedAt": "1970-01-01T00:00:00.000Z", + "groups": null, + "headline": null, + "id": "5126c9f1111e15a24a066130", + "isSupport": false, + "isSynced": null, + "location": null, + "name": "Equinix - SV1", + "online": false, + "phone": null, + "social": null, + "stats": { + "articles": 0, + "events": 0, + "followers": 0, + "following": 0, + "interconnections": 0, + "members": 0, + "posts": 0, + "privateArticles": 0, + "privateEvents": 0, + "privatePosts": 0 + }, + "status": "ACTIVE", + "summary": null, + "type": "DATA_CENTER_FACILITY", + "updatedAt": "2015-11-04T06:07:13.430Z", + "username": "equinix-sv1", + "verified": true + }, + "dataCenterFacilityId": "5126c9f1111e15a24a066130", + "deleted": false, + "deletedAt": "1970-01-01T00:00:00.000Z", + "id": "5762451a82894b9b1b1a5dc2", + "ip": { + "ipv4": null, + "ipv6": null + }, + "locationId": "b3f5ac21-fec1-4418-9e1a-709d48da59fa", + "crossConnectId": "68696464-b2f7-4c90-a342-293f7385469a", + "metro": { + "code": null, + "country": "USA", + "createdAt": "2016-02-12T09:01:33.840Z", + "deleted": false, + "deletedAt": null, + "description": null, + "id": "1232413986c08c061dd8c45f", + "logo": null, + "name": "SJC", + "ready": true, + "regionIds": [], + "updatedAt": "2016-02-12T09:01:33.840Z" + }, + "metroId": "1232413986c08c061dd8c45f", + "name": "Vicente", + "networkServiceProviderId": null, + "partner": { + "regionNames": [], + "type": "NONE" + }, + "portId": null, + "singleService": false, + "speed": { + "name": "1000 Mbps", + "value": 1000 + }, + "status": "ACTIVE", + "type": "PHYSICAL", + "updatedAt": "2016-06-16T06:20:11.116Z", + "vlanRange": [ + { + "from": 3600, + "to": 3699 + } + ] + } + } + }, + "schema": { + "$ref": "#/components/schemas/PortModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Ports"], + "description": "Update a port", + "operationId": "UpdatePortDetails", + "summary": "Update port details" + } + }, + "/api/company/{companyName}/ports/{portId}/access-circuit": { + "get": { + "parameters": [ + { + "description": "The username of the company to check the port for.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The port id.", + "in": "path", + "example": "55767b5652a693344a015744", + "name": "portId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "crossConnectConnectorType": "SC", + "crossConnectId": "19204", + "crossConnectMediaConvertor": true, + "crossConnectMediaType": "SMF", + "crossConnectProvider": "My cross connect provider", + "crossConnectSalesRecordId": "", + "id": "12345", + "localLoopPartnerLocalLineNo": "L93850", + "localLoopRemoteCarrierContactNo": "+61 3 2223 3344", + "localLoopRemoteLocalLineNo": "L843840384", + "localLoopRemoteLocalLinePartner": "Partner name", + "localLoopRemoteRefNo": "#980344933948", + "localLoopSpeed": "0", + "managedRouterServiceCeWanInterface": "", + "managedRouterServiceCeWanIpAddress": "", + "managedRouterServiceCpeOrder": "", + "managedRouterServiceDialupNo": "", + "managedRouterServiceManagementIp": "192.0.2.101", + "managedRouterServiceRemark": "", + "managedRouterServiceRouterName": "cds-e038kf-jhsnv", + "managedRouterServiceRouterOwner": "", + "managedRouterServiceRouterProvider": "", + "premiumColocationPanelNumber": "", + "premiumColocationRackId": "", + "premiumColocationSalesRecordId": "" + } + } + }, + "schema": { + "properties": { + "crossConnectConnectorType": { + "enum": ["SC", "FC", "LC", "BNC", "RJ48", "RJ45"], + "type": "string" + }, + "crossConnectId": { + "type": "string" + }, + "crossConnectMediaConvertor": { + "type": "boolean" + }, + "crossConnectMediaType": { + "enum": ["SMF", "MMF", "COAXIAL", "COPPER"], + "type": "string" + }, + "crossConnectProvider": { + "type": "string" + }, + "crossConnectSalesRecordId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "localLoopPartnerLocalLineNo": { + "type": "string" + }, + "localLoopRemoteCarrierContactNo": { + "type": "string" + }, + "localLoopRemoteLocalLineNo": { + "type": "string" + }, + "localLoopRemoteLocalLinePartner": { + "type": "string" + }, + "localLoopRemoteRefNo": { + "type": "string" + }, + "localLoopSpeed": { + "description": "The local loop speed.", + "type": "string" + }, + "managedRouterServiceCeWanInterface": { + "type": "string" + }, + "managedRouterServiceCeWanIpAddress": { + "type": "string" + }, + "managedRouterServiceCpeOrder": { + "type": "string" + }, + "managedRouterServiceDialupNo": { + "type": "string" + }, + "managedRouterServiceManagementIp": { + "type": "string" + }, + "managedRouterServiceRemark": { + "type": "string" + }, + "managedRouterServiceRouterName": { + "type": "string" + }, + "managedRouterServiceRouterOwner": { + "type": "string" + }, + "managedRouterServiceRouterProvider": { + "type": "string" + }, + "premiumColocationPanelNumber": { + "type": "string" + }, + "premiumColocationRackId": { + "type": "string" + }, + "premiumColocationSalesRecordId": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "OK", + "headers": {} + }, + "401": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "error": { + "accessRequests": [ + { + "action": "network:ReadPort", + "resource": "cc-api:network::1234567890:Port/*" + } + ], + "message": "Access denied", + "principalId": { + "id": "1234567890" + }, + "stack": "Error: Access denied\n at Object.module.exports [as error] ", + "status": 401, + "statusCode": 401 + } + } + } + } + } + }, + "description": "Unauthorized", + "headers": {} + }, + "404": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "error": { + "message": "No access-circuit information was found for the given port", + "status": 404, + "statusCode": 404 + } + } + } + } + } + }, + "description": "Not Found", + "headers": {} + } + }, + "tags": ["Ports"], + "description": "", + "operationId": "GetPortCircuitDetails", + "summary": "Read port access circuit details" + } + }, + "/api/company/{companyName}/ports/{portId}/{action}(active|disable)": { + "post": { + "parameters": [ + { + "description": "The username of the company to check the port for.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The port id.", + "in": "path", + "example": "55767b5652a693344a015744", + "name": "portId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The action to take.", + "in": "path", + "example": "action(sendloa)", + "name": "action", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "activeChangedAt": "2016-06-16T06:20:10.640Z", + "asn": { + "asn": "176251", + "createdAt": "2016-06-16T06:20:11.053Z", + "deleted": false, + "deletedAt": null, + "status": "VERIFIED", + "type": "ALLOCATED", + "updatedAt": "2016-06-16T06:20:11.053Z" + }, + "capacity": { + "remaining": 900, + "total": 1000, + "utilised": 100 + }, + "company": { + "tags": [], + "avatar": null, + "avatarId": null, + "background": null, + "companies": null, + "company": { + "address": null, + "addresses": [], + "businessType": null, + "city": null, + "clientId": null, + "companySize": null, + "country": null, + "dateFounded": null, + "email": null, + "emailDomains": [], + "fax": null, + "first": null, + "industry": null, + "last": null, + "markets": {}, + "phone": null, + "regionalInternetRegistry": null, + "state": null, + "website": null, + "zip": null + }, + "createdAt": "2016-06-16T06:20:09.604Z", + "deleted": false, + "deletedAt": null, + "groups": null, + "headline": null, + "id": "5762451982894b9b1b1a5dbc", + "isSupport": false, + "isSynced": null, + "location": null, + "name": "corp", + "online": false, + "phone": null, + "social": null, + "stats": { + "articles": 0, + "events": 0, + "followers": 0, + "following": 0, + "interconnections": 0, + "members": 1, + "posts": 0, + "privateArticles": 0, + "privateEvents": 0, + "privatePosts": 0 + }, + "status": "ACTIVE", + "summary": null, + "type": "COMPANY", + "updatedAt": "2016-06-16T06:20:09.604Z", + "username": "corp", + "verified": false + }, + "companyId": "5762451982894b9b1b1a5dbc", + "connections": [ + { + "id": "5762451d82894b9b1b1a5dd2", + "name": "Sierra", + "status": "ACTIVE" + } + ], + "controllers": [ + { + "activeChangedAt": "2016-06-16T06:20:11.458Z", + "asn": { + "asn": "54321", + "createdAt": "2016-06-16T06:20:11.460Z", + "deleted": false, + "deletedAt": null, + "status": "VERIFIED", + "type": "SYSTEM", + "updatedAt": "2016-06-16T06:20:11.460Z" + }, + "createdAt": "2016-06-16T06:20:11.114Z", + "deleted": false, + "deletedAt": null, + "id": "5762451b82894b9b1b1a5dc6", + "ip": { + "ipv4": "198.51.100.1", + "ipv6": "2001:DB8::1111:1111:1111:1111" + }, + "metro": { + "code": null, + "country": "USA", + "createdAt": "2016-02-12T09:01:33.840Z", + "deleted": false, + "deletedAt": null, + "description": null, + "id": "1232413986c08c061dd8c45f", + "logo": null, + "name": "SJC", + "ready": true, + "regionIds": [], + "updatedAt": "2016-02-12T09:01:33.840Z" + }, + "metroId": "1232413986c08c061dd8c45f", + "name": "corp - Skyla", + "password": "", + "portIds": ["5762451a82894b9b1b1a5dc2"], + "status": "ACTIVE", + "type": "USER", + "updatedAt": "2016-06-16T06:20:11.462Z", + "vlan": 200 + } + ], + "createdAt": "2016-06-16T06:20:10.029Z", + "dataCenterFacility": { + "tags": [], + "avatar": null, + "avatarId": null, + "background": null, + "companies": null, + "company": { + "address": null, + "addresses": [ + { + "address": "11 Great Oaks Boulevard", + "city": "San Jose", + "country": "USA", + "email": "", + "geo": { + "coordinates": [-121.78322, 37.24162], + "type": "Point" + }, + "phone": "", + "primary": true, + "state": "California", + "zip": "95119-1242" + } + ], + "businessType": null, + "city": null, + "clientId": null, + "companySize": null, + "country": null, + "dateFounded": null, + "email": null, + "emailDomains": [], + "fax": null, + "first": null, + "industry": null, + "last": null, + "markets": {}, + "phone": null, + "regionalInternetRegistry": null, + "state": null, + "website": null, + "zip": null + }, + "createdAt": "2015-11-04T06:07:12.785Z", + "dataCenterFacility": { + "id": "b3f5ac21-fec1-4418-9e1a-709d48da59fa", + "metroId": "1232413986c08c061dd8c45f", + "ready": true, + "speeds": [], + "canBundleCrossConnect": true + }, + "deleted": false, + "deletedAt": "1970-01-01T00:00:00.000Z", + "groups": null, + "headline": null, + "id": "5126c9f1111e15a24a066130", + "isSupport": false, + "isSynced": null, + "location": null, + "name": "Equinix - SV1", + "online": false, + "phone": null, + "social": null, + "stats": { + "articles": 0, + "events": 0, + "followers": 0, + "following": 0, + "interconnections": 0, + "members": 0, + "posts": 0, + "privateArticles": 0, + "privateEvents": 0, + "privatePosts": 0 + }, + "status": "ACTIVE", + "summary": null, + "type": "DATA_CENTER_FACILITY", + "updatedAt": "2015-11-04T06:07:13.430Z", + "username": "equinix-sv1", + "verified": true + }, + "dataCenterFacilityId": "5126c9f1111e15a24a066130", + "deleted": false, + "deletedAt": "1970-01-01T00:00:00.000Z", + "id": "5762451a82894b9b1b1a5dc2", + "ip": { + "ipv4": null, + "ipv6": null + }, + "locationId": "b3f5ac21-fec1-4418-9e1a-709d48da59fa", + "crossConnectId": "68696464-b2f7-4c90-a342-293f7385469a", + "metro": { + "code": null, + "country": "USA", + "createdAt": "2016-02-12T09:01:33.840Z", + "deleted": false, + "deletedAt": null, + "description": null, + "id": "1232413986c08c061dd8c45f", + "logo": null, + "name": "SJC", + "ready": true, + "regionIds": [], + "updatedAt": "2016-02-12T09:01:33.840Z" + }, + "metroId": "1232413986c08c061dd8c45f", + "name": "Vicente", + "networkServiceProviderId": null, + "partner": { + "regionNames": [], + "type": "NONE" + }, + "portId": null, + "singleService": false, + "speed": { + "name": "1000 Mbps", + "value": 1000 + }, + "status": "ACTIVE", + "type": "PHYSICAL", + "updatedAt": "2016-06-16T06:20:11.116Z", + "vlanRange": [ + { + "from": 3600, + "to": 3699 + } + ] + } + } + }, + "schema": { + "$ref": "#/components/schemas/PortModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Ports"], + "description": "", + "operationId": "UpdatePortAction", + "summary": "Perform a action on a port" + } + }, + "/api/company/{companyName}/ports/{portId}/utilization": { + "get": { + "parameters": [ + { + "in": "path", + "description": "The username of the company to check the port for.", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "description": "The port id.", + "example": "55767b5652a693344a015744", + "name": "portId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "description": "Unix timestamp for beginning of time window.", + "example": "1459376516", + "name": "start", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "description": "Unix timestamp for end of time window.", + "example": "1459376516", + "name": "end", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "description": "Set the resolution of response ('day' | 'hour' | 'minute'). Resolution defaults to minute if not passed.\nNote: As minute is the smallest resolution, it will not have `min/max` fields in the response.", + "example": "day", + "name": "resolution", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "portId": 120391239323, + "results": [ + { + "rxAverage": 1, + "rxMax": 2, + "rxMin": 0.005, + "time": 49303945838, + "txAverage": 1, + "txMax": 2, + "txMin": 0.005 + } + ], + "unit": "Mbps" + } + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Ports"], + "description": "Obtain utilization information about a specific port using a specific time period and preferred resolution.\n\nUtilization is based on connections attached to a port. Incoming connections (connections initiated by someone else that you accepted) are not included in utilization, but outgoing connections (connections you initiated) are included. You may not create an outgoing connection request that exceeds your port utilization.", + "operationId": "GetPortUtilization", + "summary": "Get port utilization data" + } + }, + "/api/company/{companyName}/ports/{portId}/vlan": { + "get": { + "parameters": [ + { + "in": "path", + "description": "The username of the company to check the port for.", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "description": "The port id.", + "example": "55767b5652a693344a015744", + "name": "portId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "description": "Retrieve available VLANs? Default: true.", + "example": true, + "name": "detailed", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "description": "The service type to retrieve the available VLANs for. Accepted values are ‘connection’ and ‘gia’. Default: ‘connection’.", + "example": "connection", + "name": "service", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "id": 120391239323, + "available": [100, 200, 300, 400], + "ranges": [ + { + "start": 100 + }, + { + "end": 1000 + } + ], + "unit": "Mbps" + } + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Ports"], + "description": "Return the vlan information around the given port", + "operationId": "GetPortVlanInfo", + "summary": "Get port VLAN info" + } + }, + "/api/directConnectPartner/{username}/regions": { + "get": { + "parameters": [ + { + "description": "The username of the Direct Connect Partner (DCP) for which to retrieve the ports/regionIds.", + "in": "path", + "name": "username", + "required": true, + "schema": { + "type": "string", + "example": "amazon" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "results": [ + { + "id": "579ec72fa21a602e46f32c30", + "companyId": "579ec72da21a602e46f32c29", + "deviceId": "e8d1ab56-74ff-401a-8379-760a018178c1", + "portId": null, + "name": null, + "speed": 1000, + "locationId": "b3f5ac21-fec1-4418-9e1a-709d48da59fa", + "dataCenterFacilityId": "5126c9f1111e15a24a066130", + "networkServiceProviderId": null, + "metroId": "d466b388d3e9ee0a92177910", + "status": "ACTIVE", + "type": "DCP", + "partner": { + "type": "AWS", + "regionName": "us-west-1", + "connectionSpeeds": [ + { + "value": 50, + "type": "AUTOMATIC" + }, + { + "value": 100, + "type": "AUTOMATIC" + }, + { + "value": 200, + "type": "AUTOMATIC" + }, + { + "value": 300, + "type": "AUTOMATIC" + }, + { + "value": 400, + "type": "AUTOMATIC" + }, + { + "value": 500, + "type": "AUTOMATIC" + }, + { + "value": 1000, + "type": "MANUAL" + }, + { + "value": 10000, + "type": "MANUAL" + } + ] + }, + "asnId": null, + "ip": { + "ipv4": null, + "ipv6": null + }, + "activeChangedAt": null, + "updatedAt": "2016-08-01T03:51:11.554Z", + "createdAt": "2016-08-01T03:51:11.554Z", + "deleted": false, + "deletedAt": "1970-01-01T00:00:00.000Z" + } + ] + } + } + }, + "schema": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PortModel" + } + } + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Ports"], + "description": "DCP Partner | Username\n--:| ----\nAWS | amazon\nAZURE | azure\nGCE | google_cloud\nTENCENT | tencent-cloud\nALICLOUD | alibaba_cloud", + "operationId": "GetDCPPortsAndRegions", + "summary": "Get all ports/regions for DCP" + } + }, + "/api/directConnectPartner/{username}/addons": { + "get": { + "parameters": [ + { + "description": "The username of the Direct Connect Partner (DCP) for which to retrieve the add-ons.", + "in": "path", + "name": "username", + "required": true, + "schema": { + "type": "string", + "example": "amazon" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "results": [ + { + "createdAt": "2016-08-23T05:48:34.022Z", + "updatedAt": "2016-08-23T05:48:34.022Z", + "value": 1000, + "entitlementType": null, + "destCompanyId": "57bbe3b04ae42f987d9668de", + "destPortId": "57bbe3b04ae42f987d9668df", + "floorMonthly": 0, + "monthly": 0, + "currency": "USD", + "companyIds": [], + "visible": false, + "regionIds": [], + "tags": [], + "displayOrder": 0, + "displayTemplate": "Unnamed", + "name": "Global Connection", + "id": "57bbe3b20e4a257d986b2d74" + } + ] + } + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Ports"], + "description": "", + "operationId": "GetAllDCPAddons", + "summary": "Get all DCP add-ons" + } + }, + "/api/company/{companyName}/ports/{portId}/connections": { + "get": { + "parameters": [ + { + "description": "The username of the company to check the port for.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The port id.", + "in": "path", + "example": "55767b5652a693344a015744", + "name": "portId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Ports"], + "description": "", + "operationId": "get-port-connections", + "summary": "Get all connections for a specified port" + } + }, + "/v2/edgeports/quotes/bandwidths": { + "get": { + "summary": "List Edge Port bandwidths", + "description": "Retrieves a list of bandwidths that are available for Edge Port (used in dropdown selectors).\n\n

Policies

\nThe following policies are required to be configured to be able to access this endpoint\n", + "tags": ["Edge Ports"], + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "description": "Unique id for the bandwidth config", + "type": "string" + }, + "bandwidth": { + "description": "Bandwidth value", + "type": "number" + }, + "unit": { + "description": "Bandwidth value's unit", + "type": "string" + } + } + } + }, + "links": { + "type": "object" + }, + "page": { + "description": "(To be deprecated as pagination is unnecessary)", + "deprecated": true, + "type": "string" + }, + "size": { + "description": "(To be deprecated as pagination is unnecessary)", + "deprecated": true, + "type": "string" + }, + "total": { + "description": "(To be deprecated as pagination is unnecessary)", + "deprecated": true, + "type": "string" + } + } + }, + "example": { + "data": [ + { + "id": "0000000000004-41122-3", + "bandwidth": 1000, + "unit": "Mbps" + } + ], + "links": {}, + "page": 1, + "size": 1, + "total": 1 + } + } + } + }, + "500": { + "description": "External server unhandled error", + "headers": {} + } + } + } + }, + "/v2/edgeports/quotes/contract-terms": { + "get": { + "summary": "List Edge Port contract terms", + "description": "Retrieves a list of contract terms that are available for Edge Ports (used in dropdown selectors).\n\n

Policies

\nThe following policies are required to be configured to be able to access this endpoint\n", + "tags": ["Edge Ports"], + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "description": "Unique id for the contract-term config", + "type": "string" + }, + "contractTerm": { + "description": "Contract-term value", + "type": "number" + }, + "unit": { + "description": "Contract-term value's unit", + "type": "string" + } + } + } + }, + "links": { + "type": "object" + }, + "page": { + "description": "(To be deprecated as pagination is unnecessary)", + "deprecated": true, + "type": "string" + }, + "size": { + "description": "(To be deprecated as pagination is unnecessary)", + "deprecated": true, + "type": "string" + }, + "total": { + "description": "(To be deprecated as pagination is unnecessary)", + "deprecated": true, + "type": "string" + } + } + }, + "example": { + "data": [ + { + "contractTerm": 12, + "id": "00000000-0000-0000-a22d-56ffbfd111d", + "unit": "month" + } + ], + "links": {}, + "page": 1, + "size": 1, + "total": 1 + } + } + } + }, + "500": { + "description": "External server unhandled error", + "headers": {} + } + } + } + }, + "/v2/edgeports/quotes/countries": { + "get": { + "summary": "List Edge Port countries", + "description": "Retrieves a list of countries that are available for Edge Ports (used in dropdown selectors). It will contain provider details if we have vendors readily available in the country.\n\n

Policies

\nThe following policies are required to be configured to be able to access this endpoint\n", + "tags": ["Edge Ports"], + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "country": { + "description": "Name of the country", + "type": "string" + }, + "countryIso": { + "description": "Alpha-2 country code", + "type": "string" + }, + "provider": { + "description": "The provider or partner. This indicates that we have Edge Port vendors available in this country.", + "type": "string" + }, + "phonePrefix": { + "description": "The country's phone prefix", + "type": "string" + } + } + } + }, + "links": { + "type": "object" + }, + "page": { + "description": "(To be deprecated as pagination is unnecessary)", + "deprecated": true, + "type": "string" + }, + "size": { + "description": "(To be deprecated as pagination is unnecessary)", + "deprecated": true, + "type": "string" + }, + "total": { + "description": "(To be deprecated as pagination is unnecessary)", + "deprecated": true, + "type": "string" + } + } + }, + "example": { + "data": [ + { + "country": "Philippines", + "countryIso": "ph", + "provider": "Globe Telecoms", + "phonePrefix": "+63" + } + ], + "links": {}, + "page": 1, + "size": 1, + "total": 1 + } + } + } + }, + "500": { + "description": "External server unhandled error", + "headers": {} + } + } + } + }, + "/v2/edgeports/quotes/discount": { + "get": { + "summary": "Recalculate quoted price with discount", + "description": "Retruns a recalculated Edgeport price quotation using a discount code.\nThe quoteKey need to be valid, otherwise it won't be possible to return any result.\n\n

Policies

\nThe following policies are required to be configured to be able to access this endpoint\n", + "tags": ["Edge Ports"], + "parameters": [ + { + "description": "The id (quoteKey) for an external pricing result.", + "example": "d40d80c8-833b-4093-9217-74a68b75a6c4", + "in": "query", + "name": "quoteKey", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Discount code to lower the price (if valid).", + "example": "TESTING", + "in": "query", + "name": "discountCode", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "formatted-address": { + "description": "The formatted address. This may be deprecated as its redundancy of addressResult.formattedAddress", + "type": "string" + }, + "addressResult": { + "description": "The address details", + "type": "object", + "properties": { + "city": { + "description": "The quoted city", + "type": "string" + }, + "country": { + "description": "The quoted country", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The country's name" + }, + "iso": { + "type": "string", + "description": "The country's alpha-2 code" + } + } + }, + "formattedAddress": { + "description": "The formatted address that was provided from the Google Maps API search result", + "type": "string" + }, + "latitude": { + "description": "Latitude of address", + "type": "string" + }, + "longitude": { + "description": "Longitude of address", + "type": "string" + } + } + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "quoteKey": { + "description": "The id (quoteKey) for an external pricing result.", + "type": "string" + }, + "mrc": { + "description": "Monthly recurring cost value", + "type": "string" + }, + "mrcCurrency": { + "description": "Monthly recurring cost currency", + "type": "string" + }, + "trc": { + "description": "Total recurring cost value", + "type": "string" + }, + "discountValue": { + "description": "Total discounted value from original quote", + "type": "string" + } + } + } + } + } + }, + "example": { + "formatted-address": "1412 Logan Rd, Mount Gravatt, QLD, 4122, Australia", + "addressResult": { + "city": "Mount Gravatt", + "country": { + "iso": "AU", + "name": "Australia" + }, + "formattedAddress": "Example Address", + "latitude": "-27.5369265", + "longitude": "153.0786493" + }, + "data": [ + { + "quoteKey": "00000000-0000-0000-0000-74a68b75a6c4", + "mrc": "500.42", + "mrcCurrency": "USD", + "trc": "6005.04", + "discountValue": "50%" + } + ] + } + } + } + }, + "404": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "error": { + "statusCode": 404, + "name": "Error", + "message": "The discount code is invalid or not found", + "details": {} + } + } + } + } + } + }, + "description": "Not Found", + "headers": {} + } + } + } + }, + "/v2/edgeports/quotes/search": { + "post": { + "summary": "Create Edge Port quotation search", + "description": "Creates a new quotation search. It generates a request token (responseId) for retrieving price quotations available for a certain set of rules.\nThis is used in tandem with `GET /v2/edgeports/quotes/search/:responseId which should be polled until the result is available.\n\n

Policies

\nThe following policies are required to be configured to be able to access this endpoint\n", + "tags": ["Edge Ports"], + "requestBody": { + "description": "", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EdgeQuotePayload" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "responseId": { + "description": "The unique quote reqiuest token that you will use to retrieve the result once it becomes available", + "type": "string" + }, + "status": { + "description": "The current status of the quotation request. This would more likely be 'PROCESSING' at this stage", + "type": "string" + } + } + } + } + } + }, + "400": { + "description": "Bad Request - please check if env vars like SEEKER_X_API_KEY | SEEKER_JWT_TOKEN | SEEKER_BASE_URL are set", + "headers": {} + }, + "404": { + "description": "Seeker server (external provider) quote not found", + "headers": {} + }, + "500": { + "description": "Seeker server (external provider) unhandled error", + "headers": {} + } + } + } + }, + "/v2/edgeports/quotes/search/{responseId}": { + "get": { + "summary": "Retrieve Edge Port quotation search results", + "description": "Retrieves price quotation result using the responseId. This endpoint should be polled only after retrieving the responseId from POST /v2/edgeports/quotes/search. This is designed this way as retrieving quotations can take as long as 1 minute or more.\n\n

Policies

\nThe following policies are required to be configured to be able to access this endpoint\n", + "tags": ["Edge Ports"], + "parameters": [ + { + "in": "path", + "name": "responseId", + "description": "The id (quoteKey) for an external pricing result.", + "example": "4cabb80a-d6e0-4cb9-8623-393de477503f", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EdgePriceResponseV2" + } + } + } + }, + "400": { + "description": "Bad Request - please check if env vars like SEEKER_X_API_KEY | SEEKER_JWT_TOKEN | SEEKER_BASE_URL are set", + "headers": {} + }, + "404": { + "description": "Seeker server (external provider) quote not found", + "headers": {} + }, + "500": { + "description": "Seeker server (external provider) unhandled error", + "headers": {} + } + } + } + }, + "/v2/edgeports/quotes/enquiry": { + "post": { + "summary": "Send Edge Port enquiry email", + "description": "Sends an email to customer support for any Edge Port enquiry.\n

Policies

The following policies are required to be configured to be able to access this endpoint ", + "tags": ["Edge Ports"], + "requestBody": { + "description": "", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EdgeQuotePayload" + } + } + } + }, + "responses": { + "204": { + "description": "No Content", + "headers": {} + } + } + } + }, + "/v2/edgeports/orders": { + "get": { + "summary": "List Edge Port related orders & drafts", + "description": "Retrieves the full list of Edge Port orders including drafts.\n\n

Policies

\nThe following policies are required to be configured to be able to access this endpoint\n", + "tags": ["Edge Ports"], + "parameters": [ + { + "name": "page", + "description": "(For pagination) this defines the page number. works only if `size` is provided", + "in": "query", + "required": false, + "schema": { + "type": "string" + }, + "example": "2" + }, + { + "name": "size", + "description": "(For pagination) this defines the number of items per page. works only if `page` is provided", + "in": "query", + "required": false, + "schema": { + "type": "string" + }, + "example": "20" + }, + { + "name": "status", + "description": "Filters the result to only show a specific status", + "in": "query", + "required": false, + "schema": { + "type": "string" + }, + "example": "processing" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "description": "Record Id", + "type": "string" + }, + "name": { + "description": "A duplicate of portName which appears on objectType:PORT entries (To be deprecated)", + "type": "string" + }, + "portName": { + "description": "Name given to the port", + "type": "string" + }, + "speed": { + "description": "Bandwidth value in Mbps", + "type": "number" + }, + "companyId": { + "description": "Reference to company associated to this record", + "type": "string" + }, + "edgePayload": { + "type": "object", + "description": "See in examples, it's different depending on objectType" + }, + "deleted": { + "description": "Soft-delete flag value (does not appear for objectType:DRAFT)", + "type": "boolean" + }, + "deletedAt": { + "description": "ISODate when entry was soft-deleted (does not appear for objectType:DRAFT)", + "type": "string" + }, + "createdAt": { + "description": "ISODate the record was created", + "type": "string" + }, + "updatedAt": { + "description": "ISODate the record was last updated", + "type": "string" + }, + "status": { + "description": "The current state of the entry", + "type": "string", + "enum": [ + "DRAFT", + "reserved", + "created", + "processing", + "site_survey", + "installation", + "pending", + "allocated", + "loa_sent", + "setup_xc", + "done", + "cancelling", + "cancelled", + "error" + ] + }, + "objectType": { + "description": "The entry type", + "type": "string", + "enum": ["PORT", "ORDER", "DRAFT ORDER"] + }, + "daysUntilDelete": { + "description": "applicable to DRAFT types. This indicates the days remaining before a DRAFt is automatically deleted", + "type": "number" + } + } + } + }, + "examples": { + "draft": { + "summary": "Draft model", + "value": { + "id": "000000000000000000abc121", + "speed": 500, + "edgePayload": { + "addressResult": { + "city": "Kowloon", + "country": { + "iso": "HK", + "name": "Hong Kong" + }, + "formattedAddress": "Example address, Hong Kong", + "latitude": "22.3139685", + "longitude": "114.2162923" + }, + "data": [ + { + "bandwidth": "500", + "bandwidthUnit": "Mbps", + "contractTerm": "12", + "contractTermUnit": "month", + "displayName": "HKT", + "hasXcc": false, + "interval": "14 weeks", + "lastMileProvider": "Not Provided", + "lastMileProviderKey": "NOT_PROVIDED", + "mrc": "232.84", + "mrcCurrency": "USD", + "nrc": "4232.33", + "nrcCurrency": "USD", + "quoteKey": "000000000-0000-0000-0000-000000000001", + "remarks": "-", + "shieldPortId": "0000000000000000000000a", + "tcv": "15775.21", + "tcvCurrency": "USD", + "trc": "12010.08", + "trcCurrency": "USD", + "vendorName": "Vendor1", + "metro": { + "id": "0000000000000000000abc4", + "name": "Hong Kong", + "country": "hk" + } + } + ], + "responseId": "00000000-0000-0000-0000-00000000e134", + "status": "ready", + "uuid": "00000000-0000-0000-0000-000000a91234", + "selectedSolutionQuoteKey": "000000000-0000-0000-0000-000000b51234", + "country": { + "iso": "AU", + "name": "Australia" + }, + "formattedAddress": "Example address, Australia", + "latitude": "-27.5369265", + "longitude": "153.0786493", + "bandwidth": "500", + "bandwidthUnit": "Mbps", + "contractTerm": "12", + "contractTermUnit": "month", + "displayName": "Carrier1", + "hasXcc": false, + "interval": "14 weeks", + "lastMileProvider": "Not Provided", + "lastMileProviderKey": "NOT_PROVIDED", + "mrc": "1000.84", + "mrcCurrency": "USD", + "nrc": "3765.33", + "nrcCurrency": "USD", + "quoteKey": "000000000-0000-0000-0000-000000000001", + "remarks": "-", + "shieldPortId": "0000000000000000000000a", + "tcv": "15775.21", + "tcvCurrency": "USD", + "trc": "12010.08", + "trcCurrency": "USD", + "vendorName": "Vendor1", + "metro": { + "id": "0000000000000000000abc4", + "name": "Hong Kong", + "country": "hk" + }, + "siteContacts": { + "primarySiteContactName": "Juan Del Cruz", + "primarySitePhonePrefix": "+63", + "primarySiteContactPhone": "09171234567", + "primarySiteContactEmail": "jdelacruz@testmail.com", + "secondarySiteContactName": null, + "secondarySiteContactPhone": null, + "secondarySiteContactEmail": null, + "secondarySitePhonePrefix": null, + "demarcationPoint": "Building backdoor room A", + "siteAccess": "Please present your badge and register at the lobby. Contact the primary contact person on arrival", + "interfaceType": "100BASE-TX" + }, + "draftOrderId": "67ce68c2d0a86ae98ac01234" + }, + "companyId": "612f11859195c7001521234", + "createdAt": "2024-05-08T09:30:10.947Z", + "updatedAt": "2024-05-08T09:30:10.947Z", + "createdBy": "612f11859195c70015229bc", + "createdByEmail": "email@consoleconnect.com", + "portName": "Draft order 2024-05-08", + "objectType": "DRAFT ORDER", + "status": "draft", + "daysUntilDelete": 24, + "isManagedEdgePort": false + } + }, + "order": { + "summary": "Order model", + "value": { + "id": "0000000000000000000df22d", + "portName": "Test for docs", + "speed": 100, + "edgePayload": { + "country": { + "iso": "HK", + "name": "Hong Kong" + }, + "formattedAddress": "Example address, Hong Kong", + "latitude": "22.3192238", + "longitude": "114.1693282", + "bandwidth": "100", + "bandwidthUnit": "Mbps", + "contractTerm": "12", + "contractTermUnit": "month", + "displayName": "Carrier1", + "hasXcc": false, + "interval": "6 weeks", + "lastMileProvider": "Not Provided", + "lastMileProviderKey": "NOT_PROVIDED", + "mrc": "166.45", + "mrcCurrency": "USD", + "nrc": "0.00", + "nrcCurrency": "USD", + "quoteKey": "000000000-0000-0000-0000-000000000001", + "remarks": "-", + "shieldPortId": "0000000000000000000000a", + "tcv": "1997.40", + "tcvCurrency": "USD", + "trc": "1997.40", + "trcCurrency": "USD", + "vendorName": "Vendor1", + "metro": { + "id": "0000000000000000000abc4", + "name": "Hong Kong", + "country": "hk" + }, + "siteContacts": { + "primarySiteContactName": "Juan Del Cruz", + "primarySiteContactPhone": "123", + "primarySiteContactEmail": "jdelacruz@email.com", + "primarySitePhonePrefix": "+852", + "secondarySiteContactName": "test", + "secondarySiteContactPhone": null, + "secondarySiteContactEmail": null, + "secondarySitePhonePrefix": null, + "demarcationPoint": "Building backdoor room A", + "siteAccess": "Please present your badge and register at the lobby. Contact the primary contact person on arrival", + "interfaceType": "100BASE-TX" + }, + "carrier": "Carrier1", + "contentionRatio": null, + "deviceId": "sw09.hkg05 TenG0/0/0/0", + "exchangeRatio": "0.128611", + "interconnectType": "ConsoleOnly_v01", + "jumboFrame": "Yes", + "margin": "0%", + "nniVendorCircuitId": "CF771234", + "pccwgVendorCode": "VN1234", + "physicalInterface": null, + "popCode": "POP1", + "product": "SES", + "protectionType": "-", + "quoteClass": "Orderable", + "quoteClassLevel": "1", + "quoteId": "AB12345678", + "quoteValidityPeriod": "60", + "quoteValidityPeriodUnit": "DAY", + "rateSource": "Cost Book (City)", + "readyServiceDate": "TBD", + "serviceDIA": null, + "technology": "Edge Port", + "vat": "0%", + "vendorCode": "VEN", + "vendorOriginFinalTcv": "13200.00", + "vendorOriginFinalTcvCurrency": "HKD", + "vendorOriginFinalTcvWithVat": "13200.00", + "vendorOriginMrc": "1100.00", + "vendorOriginMrcCurrency": "HKD", + "vendorOriginMrcWithVat": "1100.00", + "vendorOriginNrc": "0.00", + "vendorOriginNrcCurrency": "HKD", + "vendorOriginNrcWithVat": "0.00", + "vendorOriginTcv": "13200.00", + "vendorOriginTcvCurrency": "HKD", + "vendorOriginTcvWithVat": "13200.00", + "vendorPriceOrder": "1", + "vendorProductName": "-", + "addressResult": { + "city": "Mong Kok", + "country": { + "iso": "HK", + "name": "Hong Kong" + }, + "formattedAddress": "Example address, Hong Kong", + "latitude": "22.3192238", + "longitude": "114.1693282" + } + }, + "companyId": "000000000000c7001521234", + "deleted": false, + "deletedAt": null, + "createdAt": "2025-04-02T02:41:31.153Z", + "updatedAt": "2025-04-02T02:41:32.310Z", + "status": "order", + "objectType": "ORDER" + } + }, + "port": { + "summary": "Port model", + "value": { + "id": null, + "name": "Port order", + "speed": 100, + "edgePayload": { + "country": { + "iso": "AU,", + "name": "Australia" + }, + "formattedAddress": "Example Address, Australia", + "latitude": "-37.814592", + "longitude": "144.9706302", + "bandwidth": "100", + "bandwidthUnit": "Mbps", + "contractTerm": "12", + "contractTermUnit": "month", + "displayName": "Carrier1", + "interval": "14 weeks", + "lastMileProvider": "Not Provided", + "lastMileProviderKey": "NOT_PROVIDED", + "mrc": "680.72", + "mrcCurrency": "USD", + "nrc": "3854.52", + "nrcCurrency": "USD", + "quoteKey": "000000000-0000-0000-0000-000000000001", + "remarks": "-", + "shieldPortId": "0000000000000000000000a", + "tcv": "12023.16", + "tcvCurrency": "USD", + "trc": "8168.64", + "trcCurrency": "USD", + "vendorName": "Vendor1", + "metro": { + "id": "0000000000000000000abc4", + "name": "Hong Kong", + "country": "hk" + }, + "siteContacts": { + "primarySiteContactName": "John Doe", + "primarySiteContactPhone": "1234567", + "primarySiteContactEmail": "johndoe@email.com", + "primarySitePhonePrefix": "+61", + "secondarySiteContactName": null, + "secondarySiteContactPhone": null, + "secondarySiteContactEmail": null, + "secondarySitePhonePrefix": null, + "demarcationPoint": "Test", + "siteAccess": "Test", + "interfaceType": null + }, + "carrier": "Carrier1", + "contentionRatio": null, + "deviceId": "sw09.hkg05 TenG0/0/0/0", + "exchangeRatio": "0.1", + "interconnectType": null, + "jumboFrame": "Yes", + "margin": "0%", + "nniVendorCircuitId": "CF771234", + "pccwgVendorCode": "VN1234", + "physicalInterface": null, + "popCode": "POP1", + "product": "ASW", + "quoteClass": "Orderable", + "quoteClassLevel": "1", + "quoteId": "AB12345678", + "quoteValidityPeriod": "30", + "quoteValidityPeriodUnit": "DAY", + "rateSource": "API", + "readyServiceDate": "TBD", + "serviceDIA": null, + "technology": "Edge Port", + "vat": "0%", + "vendorCode": "VEN", + "vendorOriginMrc": "883.00", + "vendorOriginMrcCurrency": "AUD", + "vendorOriginMrcWithVat": "883.00", + "vendorOriginNrc": "5000.00", + "vendorOriginNrcCurrency": "AUD", + "vendorOriginNrcWithVat": "5000.00", + "vendorOriginTcv": "15596.00", + "vendorOriginTcvCurrency": "AUD", + "vendorOriginTcvWithVat": "15596.00", + "vendorPriceOrder": "2", + "vendorProductName": "-", + "addressResult": { + "city": "Melbourne", + "country": { + "iso": "AU", + "name": "Australia" + }, + "formattedAddress": "Example Address, Australia", + "latitude": "-37.814592", + "longitude": "144.9706302" + }, + "ccprovLink": null, + "gsdtLink": null, + "VLANRange": "5" + }, + "companyId": "000000000000c7001521234", + "deleted": false, + "deletedAt": null, + "createdAt": "2024-10-01T01:06:02.218Z", + "updatedAt": "2024-10-01T01:06:02.218Z", + "status": "active", + "objectType": "PORT", + "portName": "Port Order" + } + } + } + } + } + } + } + } + }, + "/api/company/{companyName}/ports/edge-orders": { + "post": { + "summary": "Create Edge Port order", + "description": "Creates an Edge Port order to be submitted for provisioning.\n

Policies

The following policies are required to be configured to be able to access this endpoint ", + "tags": ["Edge Ports"], + "operationId": "CreateEdgePortOrder", + "parameters": [ + { + "description": "Username of the company.", + "in": "path", + "example": "regis", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateEdgePortPayload" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EdgeOrderResponse" + } + } + }, + "description": "OK", + "headers": {} + }, + "400": { + "description": "Error", + "content": { + "application/json": { + "examples": { + "quote-key": { + "summary": "invalid quote key", + "value": { + "status": 400, + "statusCode": 400, + "message": "Invalid quote key or quote details not found" + } + }, + "edge-invalid-shield-port-id": { + "summary": "invalid shield port id", + "value": { + "status": 400, + "statusCode": 400, + "message": "Cannot find DCF for given port id" + } + }, + "company-not-active": { + "summary": "company is not active or not found", + "value": { + "status": 400, + "statusCode": 400, + "message": "A company can not be found with the given id" + } + }, + "user-not-verified": { + "summary": "user/company not verified", + "value": { + "status": 400, + "statusCode": 400, + "message": "Your company has not yet been verified to use %{payment} payment method, If you wish to order %{productType}, please get verified first." + } + } + }, + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + } + } + }, + "headers": {} + }, + "404": { + "description": "Error", + "content": { + "application/json": { + "examples": { + "edge-feature-flag": { + "summary": "feature flag not enabled", + "value": { + "code": 404, + "message": "An edge order is not allowed" + } + } + }, + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + } + } + }, + "headers": {} + } + } + } + }, + "/api/company/{username}/ports/entitlement": { + "get": { + "parameters": [ + { + "description": "The username of the company to retrieve the ports and entitlement details of.", + "in": "path", + "name": "username", + "required": true, + "schema": { + "type": "string", + "example": "Acme" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": [ + { + "subscriptions": null, + "subscriptionLength": 1, + "subscriptionLengthUnit": "y", + "itemCollectionType": "port", + "id": "5c07767990a74879f2cf8cf4", + "userId": "5c07766b3a4c3579f27a4553", + "bundleId": "5c07767990a74879f2cf8cf1", + "deletedAt": null, + "createdAt": "2018-12-05T06:55:53.797Z", + "updatedAt": "2018-12-05T06:55:53.797Z", + "itemIds": ["57e0aba00956ad107191328c"] + }, + { + "entitlement": { + "57e0aba00956ad107191328c": { + "portSpeed": { + "used": null, + "available": null + }, + "maxControllerType": { + "used": "REGIONAL", + "available": null + }, + "maxControllers": { + "used": 0, + "available": null + } + }, + "57e0aba10956ad1071913290": { + "portSpeed": { + "used": null, + "available": null + }, + "maxControllerType": { + "used": null, + "available": null + }, + "maxControllers": { + "used": 0, + "available": null + }, + "cdrGlobal": { + "000000000000000000000000-111111111111111111111111": { + "name": "US-London", + "srcRegionId": "000000000000000000000000", + "destRegionId": "111111111111111111111111", + "used": 0, + "available": null + } + } + } + } + } + ] + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Entitlements"], + "description": "Get all company plans and entitlements", + "operationId": "GetPlansAndEntitlements", + "summary": "Get all plans and entitlements" + } + }, + "/api/company/{username}/ports/{portId}/entitlement": { + "get": { + "parameters": [ + { + "description": "The username of the company.", + "in": "path", + "example": "company_co", + "name": "username", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The port ID.", + "in": "path", + "example": "55767b5652a693344a015744", + "name": "portId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": ["Entitlements"], + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "subscriptions": [], + "entitlement": { + "portSpeed": { + "used": null, + "available": null + }, + "maxControllerType": { + "used": "REGIONAL", + "available": null + }, + "maxControllers": { + "used": 0, + "available": null + }, + "cdrGlobal": { + "000000000000000000000000-111111111111111111111111": { + "name": "US-London", + "srcRegionId": "000000000000000000000000", + "destRegionId": "111111111111111111111111", + "used": 0, + "available": null + } + } + } + } + } + } + } + } + } + }, + "description": "Get specific plan and entitlement details.", + "operationId": "GetPlanAndEntitlement", + "summary": "Get plan and entitlement details" + } + }, + "/api/v2/company/{username}/connections/layer2": { + "put": { + "parameters": [ + { + "in": "path", + "name": "username", + "description": "The username of the company creating the connection.", + "example": "acme", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateLayer2ConnectionSchema" + }, + "example": { + "type": "LAYER2", + "name": "my new connection", + "portId": "123", + "speed": 1000, + "paymentType": "invoice", + "duration": 1, + "durationUnit": "m", + "destMetroId": "77d9f1fbbcaa906f3cddb6d1", + "destPortId": "d466b388d3e9ee0a92177910", + "destCompany": "companyusername", + "classOfService": "SILVER", + "evergreen": false + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionModel" + }, + "examples": { + "PAYG-example": { + "summary": "PAYG example", + "value": { + "id": "58afc0499430ab7f3666b990", + "type": "LAYER2", + "status": "CREATING", + "srcRegionId": "236107000000000000000001", + "destRegionId": "236107000000000000000001", + "updatedAt": "2017-02-24T05:10:44.942Z", + "createdAt": "2017-02-24T05:10:33.807Z", + "speed": { + "value": 1000, + "name": "1000 Mbps" + }, + "subconnections": [], + "vlan": { + "id": null, + "service": null, + "customer": [] + }, + "name": "my new connection", + "cdrBillingType": "METRO", + "payg": true, + "billingType": ["PAYG"], + "classOfService": "BRONZE" + } + }, + "Plan-example": { + "summary": "Plan example", + "value": { + "id": "58afc0499430ab7f3666b990", + "name": "my new connection", + "status": "CREATING", + "type": "LAYER2", + "speed": { + "value": 1000, + "name": "1000 Mbps" + }, + "srcRegionId": "236107000000000000000001", + "destRegionId": "236107000000000000000001", + "updatedAt": "2017-02-24T05:10:44.942Z", + "createdAt": "2017-02-24T05:10:33.807Z" + } + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": [ + "Layer 2 Connections", + "Vultr Cloud", + "Oracle FastConnect", + "Tencent Cloud", + "Huawei Cloud" + ], + "summary": "Create a Layer 2 connection request", + "operationId": "create-layer2-connection-request", + "description": "\nCreate a Layer 2 connection request to a specified destination company. Layer 2 connections require a source port ID and requested metro.\n* You may not create an outgoing connection request that exceeds your port utilization or plan entitlement.\n* Both parties must approve a connection before it is activated. When either party makes a billing or capacity change, the other party must approve the connection using the approve endpoint.\n* The 'paymentType' can only be 'invoice'. A 'paymentType' of 'creditcard' is only supported via the Console Connect web application.\n* For pay-as-you-go connections where paymentType is 'creditcard', `paymentTransactionId`, duration and evergreen options must be provided in the request.\n* If paymentType is 'invoice', 'destDcf', 'duration' and 'durationUnit' should be provided." + } + }, + "/api/v2/company/{username}/connections/{connectionId}": { + "get": { + "parameters": [ + { + "in": "path", + "name": "username", + "description": "The username of the company creating the connection.", + "required": true, + "example": "acme", + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "connectionId", + "description": "The connection id", + "required": true, + "example": "55783e39519d254d36f6126e", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionModel" + }, + "examples": { + "Plan-example": { + "summary": "Plan example", + "value": { + "id": "58afc0499430ab7f3666b990", + "name": "my connection", + "status": "ACTIVE", + "type": "LAYER2", + "speed": { + "value": 1000, + "name": "1000 Mbps" + }, + "srcRegionId": "236107000000000000000001", + "destRegionId": "236107000000000000000001", + "updatedAt": "2017-02-24T05:10:44.942Z", + "createdAt": "2017-02-24T05:10:33.807Z", + "tag": null, + "deleted": false, + "deletedAt": "1970-01-01T00:00:00.000Z", + "subconnections": [], + "srcCompany": [ + { + "id": "58afc0489430ab7f3666b982" + } + ], + "destCompany": [ + { + "id": "58afc0489430ab7f3666b981" + } + ], + "metro": [ + { + "id": "d466b388d3e9ee0a92177910" + } + ], + "destMetro": [ + { + "id": "d466b388d3e9ee0a92177910" + } + ], + "port": [ + { + "id": "58afc0489430ab7f3666b97a" + }, + { + "companyId": "58afc0479430ab7f3666b974" + } + ], + "cdrBillingType": "METRO", + "payg": true, + "billingType": ["PAYG"], + "maintenanceMode": false, + "srcVlanRequest": 1000, + "destVlanRequest": 2000, + "classOfService": "GOLD", + "vlan": [ + { + "id": null + }, + { + "service": null + }, + { + "customer": [] + } + ], + "request": [ + { + "status": "PENDING" + }, + { + "destMetroId": "d466b388d3e9ee0a92177910" + }, + { + "speed": 580 + }, + { + "srcApproval": null + }, + { + "destApproval": "58afc0479430ab7f3666b971" + }, + { + "read": false + }, + { + "updatedAt": "2017-02-24T05:10:44.942Z" + } + ] + } + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Layer 2 Connections"], + "description": "", + "operationId": "read-a-connection", + "summary": "Read a Layer 2 connection" + }, + "delete": { + "parameters": [ + { + "in": "path", + "name": "username", + "description": "The username of the company creating the connection.", + "required": true, + "example": "acme", + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "connectionId", + "description": "The connection id", + "required": true, + "example": "55783e39519d254d36f6126e", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": {} + } + }, + "tags": ["Layer 2 Connections"], + "description": "", + "operationId": "delete-a-connection", + "summary": "Delete a Layer 2 connection" + }, + "post": { + "parameters": [ + { + "in": "path", + "name": "username", + "description": "The username of the company creating the connection.", + "required": true, + "example": "acme", + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "connectionId", + "description": "The connection id", + "required": true, + "example": "55783e39519d254d36f6126e", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateLayer2ConnectionSchema" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionModel" + }, + "examples": { + "Plan-example": { + "summary": "Plan example", + "value": { + "id": "58afc0499430ab7f3666b990", + "name": "my connection", + "status": "ACTIVE", + "type": "LAYER2", + "speed": { + "value": 1000, + "name": "1000 Mbps" + }, + "srcRegionId": "236107000000000000000001", + "destRegionId": "236107000000000000000001", + "updatedAt": "2017-02-24T05:10:44.942Z", + "createdAt": "2017-02-24T05:10:33.807Z", + "tag": null, + "deleted": false, + "deletedAt": "1970-01-01T00:00:00.000Z", + "subconnections": [], + "srcCompany": [ + { + "id": "58afc0489430ab7f3666b982" + } + ], + "destCompany": [ + { + "id": "58afc0489430ab7f3666b981" + } + ], + "metro": [ + { + "id": "d466b388d3e9ee0a92177910" + } + ], + "destMetro": [ + { + "id": "d466b388d3e9ee0a92177910" + } + ], + "port": [ + { + "id": "58afc0489430ab7f3666b97a" + }, + { + "companyId": "58afc0479430ab7f3666b974" + } + ], + "cdrBillingType": "METRO", + "payg": true, + "billingType": ["PAYG"], + "maintenanceMode": false, + "srcVlanRequest": 1000, + "destVlanRequest": 2000, + "classOfService": "GOLD", + "vlan": [ + { + "id": null + }, + { + "service": null + }, + { + "customer": [] + } + ], + "request": [ + { + "status": "PENDING" + }, + { + "destMetroId": "d466b388d3e9ee0a92177910" + }, + { + "speed": 580 + }, + { + "srcApproval": null + }, + { + "destApproval": "58afc0479430ab7f3666b971" + }, + { + "read": false + }, + { + "updatedAt": "2017-02-24T05:10:44.942Z" + } + ] + } + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Layer 2 Connections"], + "description": "Update a Layer 2 connection\n\nThis is used for both connection requests and regular connection edits.\n\n#### Connection speed\n\nTo prevent unexpected costs for the other party, you may only _reduce_ the speed\nof a connection to another company (either as a connection request or after it has been activated).\n\nSelf-connections can be updated to a new speed at any time.\n\nThe speed of connection groups may not be updated.", + "operationId": "update-a-connection", + "summary": "Update a connection" + } + }, + "/api/v2/company/{username}/connections/{connectionId}/approve": { + "put": { + "parameters": [ + { + "in": "path", + "name": "username", + "description": "The username of the company creating the connection.", + "required": true, + "example": "acme", + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "connectionId", + "description": "The connection id", + "required": true, + "example": "55783e39519d254d36f6126e", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ConnectionModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Layer 2 Connections"], + "description": "When both parties have approved the connection request, the connection will be created. Connections are automatically approved when a party updates the connection request.", + "operationId": "approve-a-connection-request", + "summary": "Approve a connection request" + } + }, + "/api/v2/company/{username}/connections/{connectionId}/reject": { + "put": { + "parameters": [ + { + "in": "path", + "name": "username", + "description": "The username of the company creating the connection.", + "required": true, + "example": "acme", + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "connectionId", + "description": "The connection id", + "required": true, + "example": "55783e39519d254d36f6126e", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ConnectionModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Layer 2 Connections"], + "description": "", + "operationId": "reject-a-connection-request", + "summary": "Reject a connection request" + } + }, + "/api/v2/company/{username}/connections": { + "get": { + "parameters": [ + { + "in": "path", + "name": "username", + "description": "The username of the company creating the connection.", + "example": "acme", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "page", + "description": "The page number to get.", + "required": true, + "example": "1", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "count", + "description": "The number of results per page to get.", + "required": true, + "example": "20", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "status", + "description": "Filter by connection status.", + "required": true, + "example": "ACTIVE", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Layer 2 Connections"], + "description": "Search for connections", + "operationId": "connection-search", + "summary": "Connection search" + } + }, + "/api/company/{companyName}/connections/{connectionId}/disable": { + "put": { + "parameters": [ + { + "description": "The username of the company to check is following the other.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The connection id", + "in": "path", + "example": "55783e39519d254d36f6126e", + "name": "connectionId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Layer 2 Connections"], + "description": "", + "operationId": "disable-a-connection", + "summary": "Disable a connection" + } + }, + "/api/company/{companyName}/connections/{connectionId}/enable": { + "put": { + "parameters": [ + { + "description": "The username of the company to check is following the other.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The connection id", + "in": "path", + "example": "55783e39519d254d36f6126e", + "name": "connectionId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Layer 2 Connections"], + "description": "Before a connection can be enabled, the source and destination ports must both be in the 'ACTIVE' state.", + "operationId": "enable-a-connection", + "summary": "Enable a connection" + } + }, + "/api/company/{companyName}/connections/{connectionId}/change": { + "put": { + "parameters": [ + { + "description": "The username of the company creating the connection.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The connection id", + "in": "path", + "example": "55767b5652a693344a015744", + "name": "connectionId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "summary": "Change request", + "operationId": "create-or-update-a-change-request", + "description": "When you need to make a change that affects the other end of the connection, you must make a change request so that both parties can approve the change.\nThe workflow of a change request is as follows:\n1. Company A creates a change request with a speed increase. Company A automatically approves this change. The `connection.request.status` will be set to `PENDING`.\n2. Company B can accept this change as-is and the change will be made. If company B modifies the change request, Company B automatically approves this change and company A's prior approval is removed.\n3. The change request goes back and forth between companies until it is approved by both sides, or rejected outright by one of the parties.\nThe following connection properties are currently supported:\n \n* 'speed'\n> Note: Speed decreases are allowed at any time. If a change request is made, the destination company can accept the change at a lower speed than the one specified.\n\nYou will need to have your 'companyId' handy. If you cannot remember your 'companyId', you can make a [request to find it](#tag/Search).\n### Create or update a change request\nCreate a change request. This will send an alert to the other party to approve.\n\nThe change request must be within the bounds of your port speed and Committed Data Rate (CDR). The bandwidth amount will be deducted from your entitlement (including global CDR) as soon as the request is made, reserving it for when the other party accepts the connection.\n\n> Use this endpoint to reduce the speed of an existing change request. If the other company has approved the change and you reduce the speed, the change will be applied automatically.", + "tags": ["Layer 2 Connections"], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "speed": { + "type": "number" + } + }, + "example": { + "speed": 250 + } + }, + "examples": { + "body": { + "summary": "body", + "value": { + "speed": 250 + } + } + } + } + } + } + }, + "delete": { + "parameters": [ + { + "description": "The username of the company deleting the connection.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The connection id", + "in": "path", + "example": "55767b5652a693344a015744", + "name": "connectionId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "summary": "Reject or cancel a change request", + "operationId": "reject-or-cancel-a-change-request", + "description": "Reject or cancel a change request.\n\nAfter performing this action, the 'request.status' will be set to either 'WITHDRAWN'\nif this is a change you proposed, or 'REJECTED' if this is a change the other\nparty proposed.\n\nAn alert will be sent to the other party advising them of this change.", + "tags": ["Layer 2 Connections"] + } + }, + "/api/company/{companyName}/connections/{connectionId}/change/approve": { + "put": { + "parameters": [ + { + "description": "The username of the company creating the connection.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The connection id", + "in": "path", + "example": "55767b5652a693344a015744", + "name": "connectionId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "summary": "Approve the current change request", + "operationId": "approve-the-current-change-request", + "description": "Approve a change request. If both parties have approved this change request, the change will be applied automatically.\n\nIf you wish to accept a connection at a different speed, use the [Create or update a change request](#tag/L2-Connections#operation/create-or-update-a-change-request) endpoint.", + "tags": ["Layer 2 Connections"] + } + }, + "/api/company/{companyName}/connections/{connectionId}/change/read": { + "put": { + "parameters": [ + { + "description": "The username of the company creating the connection.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The connection id", + "in": "path", + "example": "55767b5652a693344a015744", + "name": "connectionId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Layer 2 Connections"], + "description": "Mark a change request as read. This does not alter the change request, and will not allow the other side to see that you have marked it as read.\nThis is a cosmetic change, and is only used to maintain state on the front-end.", + "operationId": "mark-the-change-request-as-read", + "summary": "Mark the change request as read" + } + }, + "/api/company/{companyName}/connections/{connectionId}/sync": { + "put": { + "parameters": [ + { + "description": "The username of the company syncing the connection.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The connection id", + "in": "path", + "example": "55767b5652a693344a015744", + "name": "connectionId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": {} + } + }, + "summary": "Sync connection with upstream provider", + "operationId": "sync-connection-with-upstream-provider", + "description": "Sync the connection with the upstream provider. This is implemented for AzureExpressRoute, and will fetch the latest information from the Azure API. Use this when you have changed the connection speed & details in Azure and need to sync them back to Console Connect.", + "tags": ["Layer 2 Connections"] + } + }, + "/api/company/{companyName}/connections/{connectionId}/log": { + "get": { + "parameters": [ + { + "description": "The username of the company to check.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The connection id", + "in": "path", + "example": "55783e39519d254d36f6126e", + "name": "connectionId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LogModel" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Layer 2 Connections"], + "description": "", + "operationId": "get-connection-history-log-request", + "summary": "Request connection logs" + } + }, + "/api/company/{companyName}/connections/{connectionId}/utilization": { + "get": { + "parameters": [ + { + "description": "The username of the company that owns the connection to be checked.", + "in": "path", + "example": "corp", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The connection id", + "in": "path", + "example": "55767b5652a693344a015744", + "name": "connectionId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Unix timestamp for beginning of time window.", + "example": "1459376516", + "in": "query", + "name": "start", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Unix timestamp for end of time window.", + "example": "1459376516", + "in": "query", + "name": "end", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Set the resolution of the response ('day' | 'hour' | 'minute'). If no resolution is passed, it will default to 'minute'.\nNote: As 'minute' is the smallest resolution, it will not have `min/max` fields in the response.", + "example": "day", + "in": "query", + "name": "resolution", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "connectionId": 120391239323, + "results": [ + { + "rxAverage": 1, + "rxMax": 2, + "rxMin": 0.005, + "time": 49303945838, + "txAverage": 1, + "txMax": 2, + "txMin": 0.005 + } + ], + "unit": "Mbps" + } + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Layer 2 Connections"], + "description": "", + "operationId": "get-connection-utilization-data", + "summary": "Get connection utilization data" + } + }, + "/api/company/{companyName}/connections/directConnectPartner/ALICLOUD/layer2": { + "put": { + "parameters": [ + { + "description": "The username of the company creating the connection.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "classOfService", + "destPortId", + "duration", + "durationUnit", + "evergreen", + "name", + "partner", + "paymentType", + "speed", + "srcPortId", + "type" + ], + "properties": { + "srcPortId": { + "type": "string", + "description": "The source port ID." + }, + "destPortId": { + "type": "string", + "description": "The destination port ID from Alibaba Cloud." + }, + "speed": { + "type": "integer", + "description": "The speed of the connection in Mbps. Values are in increments of 10 up to a maximum of 10000." + }, + "name": { + "type": "string", + "description": "Name of the L2 connection." + }, + "type": { + "type": "string", + "description": "Set to LAYER2." + }, + "partner": { + "type": "object", + "properties": { + "account": { + "type": "string", + "description": "Your Alibaba account." + }, + "destPortIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The destination port id from Alibaba Cloud. you will need to specify the IDs of the primary and secondary ports as the ‘A' and 'B’ ports in a pair, you will be able to see this in the name, e.g. “Sydney (Australia) - A“ & “Sydney (Australia) - B“." + }, + "srcPortIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The IDs for source port redundancy." + } + } + }, + "duration": { + "type": "integer", + "description": "The duration the service was ordered for, in conjunction with durationUnit. The maximum duration by unit is, with days set at `6`, weeks at `3`, months at `36`, and years at `3`." + }, + "durationUnit": { + "type": "string", + "description": "The unit of duration the service was ordered for, in conjunction with duration. `d` for days, `w` for weeks, `m` for months, `y` for years." + }, + "classOfService": { + "type": "string", + "enum": ["BRONZE", "SILVER", "GOLD"], + "description": "The class of service for the connection. Note that if your company is an “Enterprise“ business type, your connection’s Class of Service will be BRONZE. If your company is a “Wholesaler“, you can choose from SILVER(default), or GOLD." + }, + "evergreen": { + "type": "boolean", + "description": "Set to true if you wish to have your connection and payment continue on a month-to-month basis at the end of your selected duration. Otherwise, set this to false." + }, + "paymentType": { + "type": "string", + "enum": ["invoice"], + "description": "Set to invoice." + }, + "srcVlanRequest": { + "type": "array", + "nullable": true, + "items": { + "type": "integer" + }, + "description": "This is the Vlan on your source port. You can specify the the Vlan ID provided that it is available. If you don’t want to specify it you can leave `null` then Console Connect will automatically select the next available Vlan on your port. Note that the Vlan IDs need to be unique in your response call." + } + } + }, + "examples": { + "Single-Source-Port": { + "summary": "Single Source Port", + "value": { + "srcPortId": "6790ae2137c97152a324ca6e", + "destPortId": "63758d98bb8ed30015ca477a", + "speed": 50, + "name": "Alibaba Connection", + "type": "LAYER2", + "regionId": "65c086a0fe32bccfc1859f1c", + "destRegionId": "5a4c7856c4deb60012408243", + "partner": { + "account": "5911054426601485", + "destPortIds": [ + "63758d98bb8ed30015ca477a", + "637590185756a100164423c0" + ] + }, + "duration": 1, + "durationUnit": "y", + "classOfService": "SILVER", + "evergreen": true, + "paymentType": "invoice", + "srcVlanRequest": [1225, 1226] + } + }, + "Source-Port-Redundancy": { + "summary": "Source Port Redundancy", + "value": { + "srcCompanyId": "635244684806220015481db0", + "destCompanyId": "5ba987d40bf4f0000a7b470d", + "srcPortId": "682bd178f8e1d07d605d0509", + "destPortId": "63758d98bb8ed30015ca477a", + "name": "Alibaba Connection", + "type": "LAYER2", + "speed": 5, + "partner": { + "account": "", + "destPortIds": [ + "63758d98bb8ed30015ca477a", + "637590185756a100164423c0" + ], + "srcPortIds": [ + "682bd178f8e1d07d605d0509", + "681c521cf40703c905c4e629" + ] + }, + "duration": 1, + "durationUnit": "y", + "classOfService": "SILVER", + "evergreen": true, + "paymentType": "invoice" + } + } + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlibabaDirectConnectRespModel" + }, + "examples": { + "Single-Source-Port": { + "summary": "Single Source Port", + "value": { + "destPortId": "63758d98bb8ed30015ca477a", + "srcCompanyId": "635244684806220015481db0", + "destCompanyId": "5ba987d40bf4f0000a7b470d", + "version": 2, + "srcRegionId": "65c086a0fe32bccfc1859f1c", + "destRegionId": "5a4c7856c4deb60012408243", + "name": "Alibaba Connection", + "speed": { + "value": 50, + "name": "50 Mbps" + }, + "status": "CREATING\"", + "type": "GROUP_LAYER2", + "paymentType": "invoice", + "billingType": "PAYG", + "classOfService": "SILVER", + "payg": true, + "paymentTransactionId": null, + "networkAutomation": {}, + "parentId": null, + "partner": { + "type": "ALICLOUD", + "speed": 50, + "crossconnectionStatus": "DISABLED", + "provisioningStatus": "NOTPROVISIONED", + "status": "PROVISIONING", + "account": "5911054426601485", + "destPortIds": [ + "63758d98bb8ed30015ca477a", + "637590185756a100164423c0" + ] + }, + "duration": 1, + "durationUnit": "y", + "srcUntagged": false, + "destUntagged": false, + "srcQinQ": false, + "destQinQ": false, + "cdrBillingType": "GLOBAL", + "activeChangedAt": null, + "firstActiveAt": null, + "salesRecordId": null, + "maintenanceMode": false, + "ixPartner": {}, + "discountId": null, + "request": { + "read": false + }, + "srcVlan": { + "customer": [] + }, + "destVlan": { + "customer": [] + }, + "srcConfigTag": null, + "destConfigTag": null, + "subconnectionIds": { + "primary": ["67a417eeca35ff169848e831"], + "secondary": ["67a417eeca35ff169848e832"] + }, + "importedAt": null, + "statusChangedAt": "2025-02-06T02:01:18.143Z", + "requestSource": "CONSOLE_APP", + "id": "67a417eeca35ff169848e833", + "createdAt": "2025-02-06T02:01:18.144Z", + "updatedAt": "2025-02-06T02:01:18.171Z", + "deletedAt": null, + "deleted": false, + "srcPortId": "6790ae2137c97152a324ca6e", + "typeFriendly": "Alicloud Direct Connect", + "isReceiver": false, + "isCreator": true, + "subconnections": [] + } + }, + "Source-Port-Redundancy": { + "summary": "Source Port Redundancy", + "value": { + "destPortId": "63758d98bb8ed30015ca477a", + "srcCompanyId": "635244684806220015481db0", + "destCompanyId": "5ba987d40bf4f0000a7b470d", + "version": 2, + "srcRegionId": "", + "destRegionId": "", + "name": "Alibaba Connection", + "speed": { + "value": 5, + "name": "5 Mbps" + }, + "status": "CREATING", + "type": "GROUP_LAYER2", + "paymentType": "invoice", + "billingType": "PAYG", + "classOfService": "SILVER", + "payg": true, + "paymentTransactionId": null, + "networkAutomation": {}, + "parentId": null, + "partner": { + "type": "ALICLOUD", + "speed": 50, + "crossconnectionStatus": "DISABLED", + "provisioningStatus": "NOTPROVISIONED", + "status": "PROVISIONING", + "account": "", + "destPortIds": [ + "63758d98bb8ed30015ca477a", + "637590185756a100164423c0" + ], + "srcPortIds": [ + "682bd178f8e1d07d605d0509", + "681c521cf40703c905c4e629" + ] + }, + "duration": 1, + "durationUnit": "y", + "srcUntagged": false, + "destUntagged": false, + "srcQinQ": false, + "destQinQ": false, + "cdrBillingType": "GLOBAL", + "activeChangedAt": null, + "firstActiveAt": null, + "salesRecordId": null, + "maintenanceMode": false, + "ixPartner": {}, + "discountId": null, + "request": { + "read": false + }, + "srcVlan": { + "customer": [] + }, + "destVlan": { + "customer": [] + }, + "srcConfigTag": null, + "destConfigTag": null, + "subconnectionIds": { + "primary": ["682c32f4298d221ec647b332"], + "secondary": ["682c32f4298d221ec647b333"] + }, + "importedAt": null, + "statusChangedAt": "2025-05-20T07:44:52.621Z", + "requestSource": "CONSOLE_API", + "id": "682c32f4298d221ec647b334", + "createdAt": "2025-05-20T07:44:52.622Z", + "updatedAt": "2025-05-20T07:44:52.639Z", + "deletedAt": null, + "deleted": false, + "srcPortId": "682bd178f8e1d07d605d0509", + "typeFriendly": "Alicloud Direct Connect", + "isReceiver": false, + "isCreator": true, + "subconnections": [], + "destPort": {}, + "destCompany": {}, + "srcCompany": {}, + "destPorts": [], + "srcPorts": [], + "port": {} + } + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Alibaba Cloud"], + "operationId": "createAliCloudConnection", + "summary": "Create a Layer 2 ALICLOUD Direct Connect Partner connection", + "description": "Prerequisites\n* Your company has been verified on the Console Connect platform.\n* The authenticated user account has Network Admin permissions.\n* The source port is ACTIVE." + } + }, + "/console_secure/antiddos/v1/cad/costs": { + "get": { + "operationId": "get-anti-ddos-costs", + "tags": ["Pricing"], + "summary": "Anti-DDoS - Network-Based Protection Costs", + "description": "Returns the MRC (Monthly Recurring Charge) and NRC (Non-Recurring Charge or One-off Charge) for a potential new order.", + "parameters": [ + { + "name": "package", + "in": "query", + "schema": { + "$ref": "#/components/schemas/Package" + } + }, + { + "name": "number_of_protected_ips", + "in": "query", + "schema": { + "$ref": "#/components/schemas/NumberOfProtectedIpsInQuery" + } + }, + { + "name": "total_inbound_traffic", + "in": "query", + "schema": { + "type": "string", + "enum": [ + "0,50", + "51,100", + "101,200", + "201,500", + "501,1000", + "1001,2000" + ] + }, + "example": "51,100", + "description": "Corresponding Legitimate Traffic. Comma separated list of minimum and maximum values, in Mbps." + }, + { + "name": "total_mitigated_traffic", + "in": "query", + "schema": { + "$ref": "#/components/schemas/TotalMitigatedTraffic" + } + }, + { + "name": "service_period", + "in": "query", + "schema": { + "type": "integer", + "enum": [12, 24] + }, + "example": 12 + } + ], + "responses": { + "200": { + "description": "The costs were successfully calculated.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mrc": { + "type": "number", + "description": "Monthly Recurring Charge (MRC) in US dollars.", + "example": 109 + }, + "nrc": { + "type": "number", + "description": "Non-Recurring Charge (NRC), also known as One-off Charge, in US dollars.", + "example": 450.5 + } + } + } + } + } + }, + "400": { + "description": "The request was invalid because of missing and/or invalid fields.", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "List of missing and/or invalid fields.", + "properties": { + "invalidFields": { + "type": "array", + "items": { + "type": "string", + "example": "Package must be one of the following: alwayson, ondemand", + "description": "Error message describing the problematic field." + } + } + } + } + } + } + }, + "500": { + "description": "There was an internal server error." + } + } + } + }, + "/console_secure/antiddos/v1/cad/terminationsites": { + "get": { + "tags": ["Anti-DDoS"], + "summary": "Returns a list of termination sites.", + "operationId": "GetTerminationSitesList", + "responses": { + "200": { + "description": "Array of termination sites, with only basic fields.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReturnedTerminationSite" + } + } + } + } + } + } + } + }, + "/console_secure/antiddos/v1/cad/dnsAccUid": { + "get": { + "tags": ["Anti-DDoS"], + "summary": "Get DNS UIDs and synonyms for the current user", + "operationId": "GetUserDNSUIDsAndSynonyms", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "dns_acc_uid": { + "type": "string", + "description": "DNS UID", + "example": "123456789101112" + }, + "synonym": { + "type": "string", + "description": "Company name", + "example": "Example Ltd" + } + } + } + } + } + } + } + } + } + }, + "/console_secure/antiddos/v1/cad/salesRecords": { + "get": { + "tags": ["Anti-DDoS"], + "summary": "Returns sales records", + "operationId": "GetCADSalesRecords", + "parameters": [ + { + "in": "query", + "name": "cust_id", + "description": "insight customer id", + "required": true, + "schema": { + "type": "string" + }, + "example": "IS0168" + }, + { + "in": "query", + "name": "product_id", + "description": "array of product id, separate by comma", + "required": false, + "schema": { + "type": "string" + }, + "example": "I4E,I4P,I3E,I3W,I3P" + }, + { + "in": "query", + "name": "sale_status_id", + "description": "array of sale status id, separate by comma", + "required": false, + "schema": { + "type": "string" + }, + "example": "OP" + }, + { + "in": "query", + "name": "limit", + "description": "maximum number of records", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "maximum": 20 + }, + "example": 4 + }, + { + "in": "query", + "name": "offset", + "required": true, + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 1 + } + ], + "responses": { + "200": { + "description": "Get sales records from Insight API", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sr": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SalesRecord" + }, + "description": "array of sales records" + }, + "offset": { + "type": "integer" + }, + "limit": { + "type": "integer" + }, + "count": { + "type": "integer" + }, + "total_count": { + "type": "integer" + } + } + } + } + } + }, + "500": { + "description": "There was an internal server error. This might be caused by an Insight API connection failure." + } + } + } + }, + "/console_secure/antiddos/v1/cad/order": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Create a new order, and create a Sales Record in Insight.", + "operationId": "CreateOrderAndInsightSR", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BasicOrder" + } + } + } + }, + "responses": { + "201": { + "description": "The order was successfully created. The order ID and Sales Record ID are returned.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "Internal database ID of the created order.", + "example": 1 + }, + "insight_sr_id": { + "$ref": "#/components/schemas/InsightSrId" + } + } + } + } + } + }, + "400": { + "description": "The request was invalid because of missing and/or invalid fields.", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "List of missing and/or invalid fields.", + "properties": { + "invalidFields": { + "type": "array", + "items": { + "type": "string", + "example": "Service period must be between 1 and 600.", + "description": "Error message describing the problematic field." + } + } + } + } + } + } + }, + "500": { + "description": "There was an internal server error. This might be caused by an Insight API connection failure. This would mean the order was not created." + } + } + } + }, + "/console_secure/antiddos/v1/cad/order/{id}": { + "get": { + "tags": ["Anti-DDoS"], + "summary": "Returns a single order.", + "operationId": "GetSingleCADOrder", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of order to be fetched", + "required": true, + "schema": { + "type": "integer" + }, + "example": 1 + } + ], + "responses": { + "200": { + "description": "A JSON object containing the order, plus all protected IP addresses and provisioning configurations.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReturnedOrder" + } + } + } + }, + "404": { + "description": "The order was not found." + } + } + }, + "put": { + "tags": ["Anti-DDoS"], + "summary": "Adds the network configuration information to an existing order. This progresses its status from 'new' to 'ready for provisioning'.", + "operationId": "UpdateOrderNetworkConfiguration", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of order to be fetched", + "required": true, + "schema": { + "type": "integer" + }, + "example": 1 + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "scrubbing_centre": { + "$ref": "#/components/schemas/ScrubbingCentre" + }, + "protected_ip_addresses": { + "$ref": "#/components/schemas/ProtectedIpAddresses" + }, + "provisioning_config_active": { + "type": "object", + "properties": { + "customer_public_ip": { + "$ref": "#/components/schemas/CustomerPublicIp" + }, + "gsmp_circuit_id": { + "type": "string", + "description": "Provided by user", + "example": "HKG(PCG) GI002017" + }, + "bgp_peering_as_number": { + "$ref": "#/components/schemas/BgpPeeringAsNumber" + } + } + }, + "provisioning_config_standby": { + "type": "object", + "properties": { + "customer_public_ip": { + "$ref": "#/components/schemas/CustomerPublicIp" + }, + "gsmp_circuit_id": { + "type": "string", + "description": "Provided by user", + "example": "HKG(PCG) GI002017" + }, + "bgp_peering_as_number": { + "$ref": "#/components/schemas/BgpPeeringAsNumber" + } + } + }, + "termination_site": { + "$ref": "#/components/schemas/BasicTerminationSite", + "description": "To create a new Termination Site, specify these fields" + }, + "termination_site_id": { + "type": "integer", + "description": "To use an existing Termination Site, specify its ID", + "example": 45 + } + } + } + } + } + }, + "responses": { + "200": { + "description": "The order was successfully configured. The circuit ID is returned.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "circuit_id": { + "type": "integer", + "description": "Circuit ID", + "example": "ASH(IPD) CAD900000" + } + } + } + } + } + }, + "400": { + "description": "The request was invalid because of missing and/or invalid fields.", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "List of missing and/or invalid fields.", + "properties": { + "invalidFields": { + "type": "array", + "items": { + "type": "string", + "example": "Scrubbing Centre is mandatory.", + "description": "Error message describing the problematic field." + } + } + } + } + } + } + }, + "404": { + "description": "The order was not found." + } + } + } + }, + "/console_secure/antiddos/v1/cad/costs/dns": { + "get": { + "operationId": "get-anti-ddos-dns-costs", + "tags": ["Pricing"], + "summary": "Anti-DDoS - DNS Costs", + "description": "Returns the NRC (Non-Recurring Charge or One-off Charge) for a potential new order.", + "parameters": [ + { + "name": "insight_customer_id", + "in": "query", + "schema": { + "type": "string", + "description": "The Insight customer ID.", + "example": "AAA001" + } + }, + { + "name": "uid", + "in": "query", + "schema": { + "type": "string", + "description": "The account UID of the user.", + "example": 123412341234123410 + } + }, + { + "name": "plan", + "in": "query", + "schema": { + "type": "integer", + "enum": [0, 1], + "description": "The package to calculate costs for, 0 for insurance, 1 for unlimited", + "example": 0 + } + }, + { + "name": "cleanBandwidth", + "in": "query", + "schema": { + "type": "integer", + "description": "The clean bandwidth in Mbps, options provided by the attributes endpoint dynamically.", + "example": 100 + } + }, + { + "name": "functionVersion", + "in": "query", + "description": "This known as function plan\n0 = standard\n1 = enhanced\n", + "required": true, + "schema": { + "type": "integer", + "enum": [0, 1], + "example": 0 + } + }, + { + "name": "domainCount", + "in": "query", + "description": "The number of domains\n", + "required": true, + "schema": { + "type": "integer", + "example": 15 + } + }, + { + "name": "cleanQps", + "in": "query", + "description": "The clean qps value\n", + "required": true, + "schema": { + "type": "integer", + "example": 15 + } + }, + { + "name": "portCount", + "in": "query", + "description": "The number of ports\n", + "required": true, + "schema": { + "type": "integer", + "example": 15 + } + }, + { + "name": "subscription", + "in": "query", + "schema": { + "type": "integer", + "enum": [1, 2, 3, 4, 5, 6, 12, 24], + "description": "The service period in month(s).", + "example": 12 + } + }, + { + "name": "autoRenewal", + "in": "query", + "schema": { + "type": "boolean", + "description": "Whether the order should be automatically renewed.", + "example": false + } + }, + { + "name": "isAdvancedMCA", + "in": "query", + "schema": { + "type": "boolean", + "description": "Whether the order with MCA add-on.", + "example": false + } + } + ], + "responses": { + "200": { + "description": "The costs were successfully calculated.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "price": { + "type": "number", + "description": "Non-Recurring Charge (NRC), also known as One-off Charge, in US dollars.", + "example": 1000.5 + } + } + } + } + } + }, + "400": { + "description": "The request was invalid because of missing and/or invalid fields.", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "List of missing and/or invalid fields.", + "properties": { + "invalidFields": { + "type": "array", + "items": { + "type": "string", + "example": "cleanBandwidth must be provided.", + "description": "Error message describing the problematic field." + } + } + } + } + } + } + }, + "500": { + "description": "There was an internal server error." + } + } + } + }, + "/console_secure/antiddos/v1/cad/order/dns": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Place a new DNS order", + "operationId": "CreateDNSOrder", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "resourceType": { + "description": "Type of assets to be protected:\n * `mixture` - IP Network\n * `pureweb` - Website domain\n", + "type": "string", + "enum": ["mixture", "pureweb"], + "example": "mixture" + }, + "insightId": { + "type": "string", + "description": "insight customer id" + }, + "uid": { + "type": "string" + }, + "plan": { + "type": "integer", + "enum": [0, 1, 2], + "description": "plan:\n * 0: insurance\n * 1: unlimited\n * 2: mca\n" + }, + "cleanBandwidth": { + "type": "integer", + "description": "clean bandwidth, in Mbps.", + "enum": [ + 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 150, 200, 250, + 300 + ] + }, + "functionVersion": { + "type": "integer", + "enum": [0, 1], + "description": "function:\n * 0: standard\n * 1: enhanced\n" + }, + "domainCount": { + "type": "integer", + "maximum": 2000, + "minimum": 10, + "multipleOf": 10 + }, + "cleanQps": { + "type": "integer", + "maximum": 100000, + "minimum": 500, + "multipleOf": 100 + }, + "portCount": { + "type": "integer", + "maximum": 1000, + "minimum": 5, + "multipleOf": 5 + }, + "subscription": { + "type": "integer", + "enum": [1, 2, 3, 4, 5, 6, 12, 24], + "description": "service period" + }, + "autoRenewal": { + "type": "boolean" + }, + "vendor_account": { + "type": "string", + "description": "account UID" + }, + "contactName": { + "description": "Technical Contact Name", + "type": "string" + }, + "contactEmail": { + "description": "Technical Contact Email", + "type": "string" + }, + "contactPhone": { + "description": "Technical Contact Phone", + "type": "string" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "DNS order placed success, order ids returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "Internal database ID of the created order." + }, + "insight_sr_id": { + "$ref": "#/components/schemas/InsightSrId" + }, + "vendor_account": { + "type": "string", + "description": "account UID" + }, + "vendor_reference": { + "type": "string", + "description": "DNS instance id" + } + } + } + } + } + }, + "400": { + "description": "invalid request" + }, + "500": { + "description": "internal server error." + } + } + } + }, + "/console_secure/antiddos/v1/cad/order/dns/renew/{id}": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Renew a DNS order", + "operationId": "RenewDNSOrder", + "parameters": [ + { + "in": "path", + "name": "id", + "description": "Anti-DDoS order ID", + "required": true, + "schema": { + "type": "integer" + }, + "example": 1 + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "renewPeriod": { + "type": "integer", + "enum": [1, 2, 3, 4, 5, 6, 12, 24], + "description": "service period" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "DNS order renewed success, order ids returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "Internal database ID of the created order." + }, + "insight_sr_id": { + "$ref": "#/components/schemas/InsightSrId" + } + } + } + } + } + }, + "400": { + "description": "invalid request" + }, + "500": { + "description": "internal server error." + } + } + } + }, + "/console_secure/antiddos/v1/cad/order/dns/setRenewal/{id}": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Config renewal status of a DNS order", + "operationId": "ConfigDNSOrderRenewalStatus", + "parameters": [ + { + "in": "path", + "name": "id", + "description": "Anti-DDoS order ID", + "required": true, + "schema": { + "type": "integer" + }, + "example": 1 + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "autoRenewal": { + "type": "boolean", + "description": "renewal status" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "DNS order config success" + }, + "400": { + "description": "invalid request" + }, + "500": { + "description": "internal server error." + } + } + } + }, + "/console_secure/antiddos/v1/cad/order/salesRecord/{sr_id}/billing": { + "get": { + "tags": ["Anti-DDoS"], + "summary": "Returns a single order from insight (billing).", + "operationId": "GetBillingSingleOrderFromInsight", + "parameters": [ + { + "name": "sr_id", + "in": "path", + "description": "ID of order to be fetched", + "required": true, + "schema": { + "type": "integer" + }, + "example": 1 + } + ], + "responses": { + "200": { + "description": "Get a sales record from Insight API.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sr_id": { + "type": "integer", + "example": 260149 + }, + "billing_date": { + "type": "string", + "example": "2022-05-05T00:00:00Z" + }, + "contract_renew_date": { + "type": "string", + "example": "2022-05-05T00:00:00Z" + }, + "onetime_revenue": { + "type": "string", + "example": "1500.00" + }, + "monthly_revenue": { + "type": "string", + "example": "1500.00" + } + } + } + } + } + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Exception throw." + } + } + } + }, + "/console_secure/antiddos/v1/cad/order/salesRecord/{sr_id}/service": { + "get": { + "tags": ["Anti-DDoS"], + "summary": "Returns a single order from insight (service).", + "operationId": "GetServiceSingleOrderFromInsight", + "parameters": [ + { + "name": "sr_id", + "in": "path", + "description": "ID of order to be fetched", + "required": true, + "schema": { + "type": "integer" + }, + "example": 1 + } + ], + "responses": { + "200": { + "description": "Get a sales record from Insight API.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sr_id": { + "type": "integer", + "example": 260149 + }, + "prev_sr_id": { + "type": "integer", + "example": null + }, + "next_sr_id": { + "type": "integer", + "example": null + } + } + } + } + } + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Exception throw." + } + } + } + }, + "/console_secure/antiddos/v1/cad/order/validate": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Validate fields in order form", + "operationId": "ValidateCADfields", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BasicOrder" + } + } + } + }, + "responses": { + "200": { + "description": "All fields submitted are valid" + }, + "400": { + "description": "The request was invalid because of missing and/or invalid fields.", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "List of invalid fields.", + "properties": { + "invalidFields": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "service_period", + "description": "The problematic field name." + }, + "desc": { + "type": "string", + "example": "Service period must be between 1 and 600.", + "description": "Error message describing the problematic field." + } + } + } + } + } + } + } + } + }, + "500": { + "description": "There was an internal server error." + } + } + } + }, + "/console_secure/antiddos/v1/cad/orders": { + "get": { + "tags": ["Anti-DDoS"], + "summary": "Returns a list of orders.", + "operationId": "GetCADOrdersList", + "responses": { + "200": { + "description": "Array of CAD orders, with only basic fields (no IP addresses or configuration etc).", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "example": 1 + }, + "name": { + "type": "string", + "description": "Provided by the user; maximum 50 characters", + "example": "Anti-ddos order 123" + }, + "insight_customer_id": { + "type": "string", + "description": "Provided by JWT from Console Connect, e.g. AIN001, TAN006, IS0569, TOL, TATA", + "example": "CTL01" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "package": { + "type": "string", + "enum": ["alwayson", "ondemand"] + }, + "provider": { + "enum": ["ipdc", "dns"], + "type": "string", + "description": "The company actually responsible for handling the traffic. We are currently only using IPDC Asia.", + "example": "ipdc" + }, + "insight_sr_id": { + "$ref": "#/components/schemas/InsightSrId" + } + } + } + } + } + } + } + } + } + }, + "/console_secure/antiddos/v1/cad/costs/mca": { + "get": { + "operationId": "get-anti-ddos-mca-costs", + "tags": ["Pricing"], + "summary": "Anti-DDoS - MCA Costs", + "description": "Returns the NRC (Non-Recurring Charge or One-off Charge) for a potential new order.", + "parameters": [ + { + "name": "insight_customer_id", + "in": "query", + "schema": { + "type": "string", + "description": "The Insight customer ID.", + "example": "AAA001" + } + }, + { + "name": "uid", + "in": "query", + "schema": { + "type": "string", + "description": "The account UID of the user.", + "example": 123412341234123410 + } + }, + { + "name": "plan", + "in": "query", + "schema": { + "type": "integer", + "enum": [2], + "description": "The package to calculate costs for, fixed to 2 for MCA.", + "example": 2 + } + }, + { + "name": "cleanBandwidth", + "in": "query", + "schema": { + "type": "integer", + "description": "The clean bandwidth in Mbps, options provided by the attributes endpoint dynamically.", + "example": 10 + } + }, + { + "name": "subscription", + "in": "query", + "schema": { + "type": "integer", + "enum": [1, 2, 6, 12], + "description": "The service period in month(s).", + "example": 12 + } + }, + { + "name": "autoRenewal", + "in": "query", + "schema": { + "type": "boolean", + "description": "Whether the order should be automatically renewed.", + "example": false + } + } + ], + "responses": { + "200": { + "description": "The costs were successfully calculated.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "price": { + "type": "number", + "description": "Non-Recurring Charge (NRC), also known as One-off Charge, in US dollars.", + "example": 1000.5 + } + } + } + } + } + }, + "400": { + "description": "The request was invalid because of missing and/or invalid fields.", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "List of missing and/or invalid fields.", + "properties": { + "invalidFields": { + "type": "array", + "items": { + "type": "string", + "example": "cleanBandwidth must be provided.", + "description": "Error message describing the problematic field." + } + } + } + } + } + } + }, + "500": { + "description": "There was an internal server error." + } + } + } + }, + "/console_secure/antiddos/v1/cad/order/mca": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Create a new MCA order, and create a Sales Record in Insight.", + "operationId": "CreateMCAOrderAndInsightSR", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/McaOrder" + } + } + } + }, + "responses": { + "201": { + "description": "The order was successfully created. The order ID and Sales Record ID are returned.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "Internal database ID of the created order.", + "example": 1 + }, + "insight_sr_id": { + "$ref": "#/components/schemas/InsightSrId" + } + } + } + } + } + }, + "400": { + "description": "The request was invalid because of missing and/or invalid fields.", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "List of missing and/or invalid fields.", + "properties": { + "invalidFields": { + "type": "array", + "items": { + "type": "string", + "example": "Service period must be provided.", + "description": "Error message describing the problematic field." + } + } + } + } + } + } + }, + "500": { + "description": "There was an internal server error. This might be caused by an Insight API connection failure. This would mean the order was not created." + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/{instanceId}/accelerationRules": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Create acceleration rules for proxy instances.", + "operationId": "CreateAccelerationRule", + "parameters": [ + { + "name": "instanceId", + "in": "path", + "required": true, + "description": "The unique identifier of the instance.", + "schema": { + "$ref": "#/components/schemas/InstanceId" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAccelerationRuleRequestBody" + } + } + } + }, + "responses": { + "201": { + "description": "The acceleration rules were successfully created.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "cname": { + "type": "string", + "description": "The CNAME of the created acceleration rules.", + "example": "2131231.example001.com" + }, + "ruleName": { + "type": "string", + "description": "The name of the created acceleration rules.", + "example": "example001" + } + } + } + } + } + }, + "400": { + "description": "The request was invalid because of missing and/or invalid fields.", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "List of missing and/or invalid fields.", + "properties": { + "invalidFields": { + "type": "array", + "items": { + "type": "object", + "properties": { + "param": { + "type": "string", + "example": "servicePeriod" + }, + "msg": { + "type": "string", + "example": "switchbackTime must be between 30 and 120" + } + }, + "description": "Error message describing the problematic field." + } + } + } + } + } + } + }, + "500": { + "description": "There was an internal server error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "code: 400, Scheduler name Conflict. request id: 12341234-1234-1234-1234-123412341234", + "description": "Error message describing the internal server error." + } + } + } + } + } + } + } + }, + "get": { + "tags": ["Anti-DDoS"], + "summary": "Get acceleration rules for proxy instances.", + "operationId": "GetAccelerationRules", + "parameters": [ + { + "name": "instanceId", + "in": "path", + "required": true, + "description": "The unique identifier of the instance.", + "schema": { + "$ref": "#/components/schemas/InstanceId" + } + } + ], + "responses": { + "200": { + "description": "The acceleration rules were successfully retrieved.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AccelerationRule" + } + } + } + } + }, + "500": { + "description": "There was an internal server error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "code: 500, Internal Server Error", + "description": "Error message describing the internal server error." + } + } + } + } + } + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/{instanceId}/accelerationRules/{ruleName}": { + "put": { + "tags": ["Anti-DDoS"], + "summary": "Modify acceleration rules for proxy instances.", + "operationId": "ModifyAccelerationRule", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModifyAccelerationRuleRequestBody" + } + } + } + }, + "parameters": [ + { + "name": "instanceId", + "in": "path", + "required": true, + "description": "The unique identifier of the instance.", + "schema": { + "$ref": "#/components/schemas/InstanceId" + } + }, + { + "name": "ruleName", + "in": "path", + "required": true, + "description": "The name of the acceleration rule.", + "schema": { + "$ref": "#/components/schemas/RuleName" + } + } + ], + "responses": { + "201": { + "description": "The acceleration rules were successfully modified.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "cname": { + "type": "string", + "description": "The CNAME of the modified acceleration rules.", + "example": "2131231.example001.com" + }, + "ruleName": { + "type": "string", + "description": "The name of the modified acceleration rules.", + "example": "example001" + } + } + } + } + } + }, + "400": { + "description": "The request was invalid because of missing and/or invalid fields.", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "List of missing and/or invalid fields.", + "properties": { + "invalidFields": { + "type": "array", + "items": { + "type": "object", + "properties": { + "param": { + "type": "string", + "example": "servicePeriod" + }, + "msg": { + "type": "string", + "example": "switchbackTime must be between 30 and 120" + } + }, + "description": "Error message describing the problematic field." + } + } + } + } + } + } + }, + "500": { + "description": "There was an internal server error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "code: 500, Internal Server Error", + "description": "Error message describing the internal server error." + } + } + } + } + } + } + } + }, + "get": { + "tags": ["Anti-DDoS"], + "summary": "Get acceleration rules for proxy instances by rule name.", + "operationId": "GetAccelerationRuleByRuleName", + "parameters": [ + { + "name": "instanceId", + "in": "path", + "required": true, + "description": "The unique identifier of the instance.", + "schema": { + "$ref": "#/components/schemas/InstanceId" + } + }, + { + "name": "ruleName", + "in": "path", + "required": true, + "description": "The name of the acceleration rule.", + "schema": { + "$ref": "#/components/schemas/RuleName" + } + } + ], + "responses": { + "200": { + "description": "The acceleration rules were successfully retrieved.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccelerationRule" + } + } + } + }, + "500": { + "description": "There was an internal server error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "code: 500, Internal Server Error", + "description": "Error message describing the internal server error." + } + } + } + } + } + } + } + }, + "delete": { + "tags": ["Anti-DDoS"], + "summary": "Delete acceleration rules for proxy instances by rule name.", + "operationId": "DeleteAccelerationRuleByRuleName", + "parameters": [ + { + "name": "instanceId", + "in": "path", + "required": true, + "description": "The unique identifier of the instance.", + "schema": { + "$ref": "#/components/schemas/InstanceId" + } + }, + { + "name": "ruleName", + "in": "path", + "required": true, + "description": "The name of the acceleration rule.", + "schema": { + "$ref": "#/components/schemas/RuleName" + } + } + ], + "responses": { + "204": { + "description": "The acceleration rules were successfully deleted." + }, + "500": { + "description": "There was an internal server error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "code: 500, Internal Server Error", + "description": "Error message describing the internal server error." + } + } + } + } + } + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/{instanceId}/accelerationRules/{ruleName}/switch": { + "put": { + "tags": ["Anti-DDoS"], + "summary": "Switch between acceleration route or normal route.", + "operationId": "SwitchAccelerationRule", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "description": "The status of the acceleration rule, true: enabled, false: disabled.", + "example": true + } + } + } + } + } + }, + "parameters": [ + { + "name": "instanceId", + "in": "path", + "required": true, + "description": "The unique identifier of the instance.", + "schema": { + "$ref": "#/components/schemas/InstanceId" + } + }, + { + "name": "ruleName", + "in": "path", + "required": true, + "description": "The name of the acceleration rule.", + "schema": { + "$ref": "#/components/schemas/RuleName" + } + } + ], + "responses": { + "204": { + "description": "The acceleration rules were successfully switched." + }, + "400": { + "description": "The request was invalid because of missing and/or invalid fields.", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "List of missing and/or invalid fields.", + "properties": { + "invalidFields": { + "type": "array", + "items": { + "type": "object", + "properties": { + "param": { + "type": "string", + "example": "servicePeriod" + }, + "msg": { + "type": "string", + "example": "enable must be a boolean" + } + }, + "description": "Error message describing the problematic field." + } + } + } + } + } + } + }, + "500": { + "description": "There was an internal server error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "code: 500, Internal Server Error", + "description": "Error message describing the internal server error." + } + } + } + } + } + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/{uid}/createWebRule": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Create a web rule", + "operationId": "CreateWebRule", + "parameters": [ + { + "in": "path", + "name": "uid", + "description": "The UID of the DNS.", + "required": true, + "schema": { + "type": "string" + }, + "example": "292733187643212169" + } + ], + "requestBody": { + "description": "Request body for creating a web rule", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateWebRuleRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + }, + "500": { + "description": "Invalid request", + "content": { + "application/json": { + "example": "Unable to process request, reference id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" + } + } + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/{uid}/modifyWebRule": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Modify a web rule", + "operationId": "UpdateWebRule", + "parameters": [ + { + "in": "path", + "name": "uid", + "description": "The UID of the DNS.", + "required": true, + "schema": { + "type": "string" + }, + "example": "292733187643212169" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModifyWebRuleRequestBody" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + }, + "500": { + "description": "Invalid request", + "content": { + "application/json": { + "example": "Unable to process request, reference id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" + } + } + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/{uid}/deleteWebRule": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Delete web rules by domain", + "operationId": "DeleteWebRulesByDomain", + "parameters": [ + { + "in": "path", + "name": "uid", + "description": "The UID of the order owner.", + "required": true, + "schema": { + "type": "string" + }, + "example": "292733187643212169" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": ["domain"], + "properties": { + "domain": { + "type": "string", + "description": "The domain name", + "example": "example.com" + }, + "resourceGroupId": { + "type": "string", + "description": "The resource group ID", + "example": "" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK" + }, + "500": { + "description": "Invalid request", + "content": { + "application/json": { + "example": "Unable to process request, reference id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" + } + } + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/{uid}/associateWebCert": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Add a SSL certificate to a domain", + "operationId": "AddSSLCertificateToDomain", + "parameters": [ + { + "in": "path", + "name": "uid", + "schema": { + "type": "string" + }, + "example": "292733187643212169", + "required": true, + "description": "DNS account uid" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": ["domain", "certName", "cert", "key"], + "properties": { + "domain": { + "type": "string", + "description": "The domain name", + "example": "example.com" + }, + "certName": { + "type": "string", + "description": "The name of the SSL certificate. This name must be unique.", + "example": "ssl_cert-20240101.crt" + }, + "cert": { + "type": "string", + "description": "The SSL certificate" + }, + "key": { + "type": "string", + "description": "The private key of the SSL certificate" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK" + }, + "500": { + "description": "Invalid request", + "content": { + "application/json": { + "example": "Unable to process request, reference id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" + } + } + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/{uid}/modifyTlsConfig": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Update TLS for a domain", + "operationId": "UpdateDomainTLS", + "parameters": [ + { + "in": "path", + "name": "uid", + "schema": { + "type": "string" + }, + "example": "292733187643212169", + "required": true, + "description": "DNS account uid" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "required": ["resourceGroupId", "domain", "config"], + "properties": { + "resourceGroupId": { + "type": "string", + "example": "" + }, + "domain": { + "type": "string", + "format": "url", + "example": "example.com" + }, + "config": { + "type": "object", + "required": ["ssl_protocols", "ssl_ciphers"], + "properties": { + "ssl_protocols": { + "type": "string", + "minLength": 1, + "example": "tls1.0", + "enum": ["tls1.0", "tls1.2"] + }, + "ssl_ciphers": { + "type": "string", + "minLength": 1, + "enum": ["all", "strong"], + "description": "\"strong\" is only available when ssl_protocols=\"tls1.2\"", + "example": "all" + } + } + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK" + }, + "500": { + "description": "Invalid request", + "content": { + "application/json": { + "example": "Unable to process request, reference id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" + } + } + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/{uid}/configL7RsPolicy": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Configure L7 Rs Policy", + "operationId": "ConfigureL7RsPolicy", + "parameters": [ + { + "in": "path", + "name": "uid", + "schema": { + "type": "string" + }, + "example": "292733187643212169", + "required": true, + "description": "DNS account uid" + } + ], + "requestBody": { + "description": "Load Balancer Configuration Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigL7RsPolicyRequestBody" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response" + }, + "500": { + "description": "Error message with a camunda process instance id" + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/{uid}/describeL7RsPolicy": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Get current L7 Rs Policy settings (A.K.A back to origin settings)", + "operationId": "GetCurrentL7RsPolicySettings", + "parameters": [ + { + "in": "path", + "name": "uid", + "schema": { + "type": "string" + }, + "example": "292733187643212169", + "required": true, + "description": "DNS account uid" + } + ], + "requestBody": { + "description": "Load Balancer Configuration Request", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "example": "example.io" + }, + "realServers": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string", + "format": "ipv4", + "description": "IPv4 addresses only" + }, + "example": ["1.1.1.1", "8.8.8.8"] + }, + { + "type": "array", + "items": { + "type": "string", + "format": "hostname" + }, + "example": ["example.com", "test.org"] + } + ] + }, + "resourceGroupId": { + "type": "string", + "example": "" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response" + }, + "500": { + "description": "Error message with a camunda process instance id" + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/instance": { + "get": { + "summary": "Retrieve DNS instances", + "description": "Get a list of DNS instances with pagination", + "operationId": "GetDNSInstancesList", + "tags": ["Anti-DDoS"], + "parameters": [ + { + "name": "uid", + "in": "query", + "description": "Unique ID for filtering instances", + "schema": { + "type": "string", + "example": "292733187643212169" + } + } + ], + "responses": { + "200": { + "description": "Successful response with a list of DNS instances", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DNSInstance" + } + } + } + } + }, + "400": { + "description": "Bad Request - Invalid input parameters" + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/instance/detail/{instanceId}": { + "get": { + "summary": "Retrieve details of a single DNS instance", + "operationId": "GetSingleDNSInstanceDetail", + "tags": ["Anti-DDoS"], + "parameters": [ + { + "in": "path", + "name": "instanceId", + "schema": { + "type": "string" + }, + "required": true, + "description": "The instanceId of DNS instance", + "example": "ddos-a2dc76e8-bb13-4dab-91f9-28fafd4fc07f" + } + ], + "responses": { + "200": { + "description": "Successful response with a list of DNS instances", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DNSInstance" + } + } + } + }, + "400": { + "description": "Bad Request - Invalid input parameters" + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/network/rules": { + "get": { + "tags": ["Anti-DDoS"], + "summary": "Search for port config rules", + "operationId": "SearchPortConfigRules", + "parameters": [ + { + "in": "query", + "name": "uid", + "required": true, + "schema": { + "type": "string" + }, + "example": 292733187643212160 + }, + { + "in": "query", + "name": "instanceId", + "schema": { + "type": "string" + }, + "example": "ddos-5a46f0ed-77b8-45a4-a376-0fba87eec6cc" + }, + { + "in": "query", + "name": "page", + "schema": { + "type": "integer" + }, + "example": 1 + }, + { + "in": "query", + "name": "size", + "schema": { + "type": "integer" + }, + "example": 10 + } + ], + "responses": { + "200": { + "description": "List of port config rules", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DNSPortConfigList" + } + } + } + }, + "400": { + "description": "Invalid request" + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/network/rules/{uid}/createNetworkRules": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Create a new port config rule", + "operationId": "CreatePortConfigRule", + "parameters": [ + { + "in": "path", + "name": "uid", + "schema": { + "type": "string" + }, + "example": "292733187643212169", + "required": true, + "description": "DNS account UID" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DNSPortConfigRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Created successfully" + }, + "400": { + "description": "Invalid request" + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/network/rules/{uid}/configNetworkRules": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Edit a port config rule", + "operationId": "EditPortConfigRule", + "parameters": [ + { + "in": "path", + "name": "uid", + "schema": { + "type": "string" + }, + "example": "292733187643212169", + "required": true, + "description": "DNS account UID" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DNSPortConfigRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Edited successfully" + }, + "400": { + "description": "Invalid request" + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/network/rules/{uid}/deleteNetworkRule": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Delete a port config rule", + "operationId": "DeletePortConfigRule", + "parameters": [ + { + "in": "path", + "name": "uid", + "schema": { + "type": "string" + }, + "example": "292733187643212169", + "required": true, + "description": "DNS account UID" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DNSPortConfigRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Deleted successfully" + }, + "400": { + "description": "Invalid request" + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/network/rules/{uid}/modifyHealthCheckConfig": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Configure Health Check", + "operationId": "ConfigHealthCheck", + "parameters": [ + { + "in": "path", + "name": "uid", + "schema": { + "type": "string" + }, + "example": "292733187643212169", + "required": true, + "description": "DNS account UID" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "forwardProtocol": { + "type": "string", + "enum": ["tcp", "udp"] + }, + "frontendPort": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "example": 8080 + }, + "healthCheck": { + "type": "object", + "properties": { + "port": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "example": 8010 + }, + "timeout": { + "type": "integer", + "minimum": 1, + "maximum": 30, + "example": 5 + }, + "interval": { + "type": "integer", + "minimum": 1, + "maximum": 30, + "example": 15 + }, + "up": { + "type": "integer", + "minimum": 1, + "maximum": 10, + "example": 3 + }, + "down": { + "type": "integer", + "minimum": 1, + "maximum": 10, + "example": 3 + } + }, + "required": ["port", "timeout", "interval", "up", "down"] + }, + "instanceId": { + "type": "string", + "example": "ddos-25d832be-05c0-4d31-be38-e880f6d64e12" + }, + "uid": { + "type": "string", + "example": 292733187643212160 + } + }, + "required": [ + "forwardProtocol", + "frontendPort", + "instanceId", + "uid" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Configured successfully" + }, + "400": { + "description": "Invalid request" + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/network/protect/{uid}/modifyNetworkRuleAttribute": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Configure Session Persistence", + "operationId": "ConfigSessionPersistence", + "parameters": [ + { + "in": "path", + "name": "uid", + "schema": { + "type": "string" + }, + "example": "292733187643212169", + "required": true, + "description": "DNS account UID" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "instanceId": { + "type": "string", + "example": "ddos-6856bb46-90f4-436f-9533-3aef8a8f33db" + }, + "forwardProtocol": { + "type": "string", + "enum": ["tcp", "udp"], + "example": "tcp" + }, + "frontendPort": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "example": 8080 + }, + "config": { + "type": "object", + "properties": { + "persistenceTimeout": { + "type": "integer", + "minimum": 30, + "maximum": 3600, + "example": 3600 + } + } + }, + "uid": { + "type": "string", + "example": "292733187643212169" + } + }, + "required": [ + "instanceId", + "forwardProtocol", + "frontendPort", + "uid" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Configurated successfully" + }, + "400": { + "description": "Invalid request" + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/network/protect/{uid}/describeNetworkRuleAttributes": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "View Session Persistence", + "operationId": "ViewSessionPersistence", + "parameters": [ + { + "in": "path", + "name": "uid", + "schema": { + "type": "string" + }, + "example": "292733187643212169", + "required": true, + "description": "DNS account UID" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "instanceId": { + "type": "string", + "example": "ddos-6856bb46-90f4-436f-9578-3a338a8f33db" + }, + "protocol": { + "type": "string", + "enum": ["tcp", "udp"], + "example": "tcp" + }, + "frontendPort": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "example": 8080 + }, + "uid": { + "type": "string", + "example": "292733187643212169" + } + }, + "required": ["instanceId", "protocol", "frontendPort"] + } + } + } + }, + "responses": { + "200": { + "description": "Session Persistence Detail", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "example": 200 + }, + "data": { + "type": "object", + "properties": { + "networkRuleAttributes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "config": { + "type": "object", + "properties": { + "cc": { + "type": "object", + "properties": { + "sblack": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "integer", + "enum": [1, 2, 3, 4] + }, + "during": { + "type": "integer", + "example": 60 + }, + "expires": { + "minimum": 60, + "maximum": 604800, + "type": "integer", + "example": 600 + }, + "cnt": { + "type": "integer", + "example": 5 + } + } + } + } + }, + "required": ["sblack"] + }, + "nodataConn": { + "type": "string", + "enum": ["on", "off"], + "example": "on" + }, + "payloadLen": { + "type": "object", + "properties": { + "max": { + "type": "integer", + "minimum": 0, + "maximum": 6000, + "example": 0 + }, + "min": { + "type": "integer", + "minimum": 0, + "maximum": 6000, + "example": 6000 + } + }, + "required": ["max", "min"] + }, + "persistenceTimeout": { + "minimum": 30, + "maximum": 3600, + "description": "Session retention timeout. Value range: 30~3600, unit: second. The default is 0, which means off.", + "type": "integer", + "example": 30 + }, + "sla": { + "type": "object", + "properties": { + "cps": { + "type": "integer", + "minimum": 100, + "maximum": 100000, + "example": 100000 + }, + "cpsEnable": { + "type": "integer", + "enum": [0, 1] + }, + "maxconn": { + "type": "integer", + "minimum": 1, + "maximum": 500000 + }, + "maxconnEnable": { + "type": "integer", + "enum": [0, 1] + } + }, + "required": [ + "cps", + "cpsEnable", + "maxconn", + "maxconnEnable" + ] + }, + "slimit": { + "type": "object", + "properties": { + "bps": { + "type": "integer", + "minimum": 1024, + "maximum": 268435456 + }, + "cps": { + "type": "integer", + "minimum": 1, + "maximum": 500000 + }, + "cpsEnable": { + "type": "integer", + "enum": [0, 1] + }, + "cpsMode": { + "type": "integer", + "description": "1: manual, 2: auto", + "enum": [1, 2] + }, + "maxconn": { + "type": "integer", + "minimum": 1, + "maximum": 500000 + }, + "maxconnEnable": { + "type": "integer", + "enum": [0, 1] + }, + "pps": { + "type": "integer", + "minimum": 1, + "maximum": 100000 + } + }, + "required": [ + "bps", + "cps", + "cpsEnable", + "cpsMode", + "maxconn", + "maxconnEnable", + "pps" + ] + }, + "synproxy": { + "type": "string", + "enum": ["on", "off"], + "example": "on" + } + }, + "required": [ + "cc", + "nodataConn", + "payloadLen", + "persistenceTimeout", + "sla", + "slimit", + "synproxy" + ] + }, + "frontendPort": { + "type": "integer", + "example": 8080 + }, + "instanceId": { + "type": "string", + "example": "ddos-6856bb46-90f4-436f-9578-3a338a8f33db" + }, + "protocol": { + "type": "string", + "enum": ["tcp", "udp"], + "example": "tcp" + } + }, + "required": [ + "config", + "frontendPort", + "instanceId", + "protocol" + ] + } + }, + "requestId": { + "type": "string", + "example": "f4da3b8b-6b3b-4b0b-8b3b-6b3b4b0b8b3b" + } + }, + "required": ["networkRuleAttributes", "requestId"] + } + }, + "required": ["code", "data"] + } + } + } + }, + "400": { + "description": "Invalid request" + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/network/protect/{uid}/describeLayer4RulePolicy": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "View Back to Origin", + "operationId": "ViewBackToOrigin", + "parameters": [ + { + "in": "path", + "name": "uid", + "schema": { + "type": "string" + }, + "example": "292733187643212169", + "required": true, + "description": "DNS account UID" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "instanceId": { + "type": "string", + "example": "ddos-6856bb46-90f4-436f-9578-3aef8a8f3312" + }, + "protocol": { + "type": "string", + "enum": ["tcp", "udp"], + "example": "tcp" + }, + "frontendPort": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "example": 8080 + }, + "uid": { + "type": "string", + "example": "292733187643212169" + } + }, + "required": ["instanceId", "protocol", "frontendPort", "uid"] + } + } + } + }, + "responses": { + "200": { + "description": "Back to Origin Detail", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "example": 200 + }, + "data": { + "type": "object", + "properties": { + "backendPort": { + "type": "integer", + "example": 80 + }, + "bakMode": { + "type": "string", + "enum": ["0", "1"], + "example": "1" + }, + "currentIndex": { + "type": "integer", + "example": 1 + }, + "forwardProtocol": { + "type": "string", + "enum": ["tcp", "udp"], + "example": "tcp" + }, + "frontendPort": { + "type": "integer", + "example": 80 + }, + "instanceId": { + "type": "string", + "example": "ddos-25d832be-05c0-4d31-be38-e880f6d64e12" + }, + "priRealServers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "currentIndex": { + "type": "integer", + "example": 1 + }, + "eip": { + "type": "string", + "example": "56.123.65.32" + }, + "frontendPort": { + "type": "integer", + "example": 80 + }, + "instanceId": { + "type": "string", + "example": "ddos-25d832be-05c0-4d31-be38-e880f6d64e66" + }, + "protocol": { + "type": "string", + "enum": ["tcp", "udp"], + "example": "tcp" + }, + "realServer": { + "type": "string", + "example": "123.123.44.123" + } + }, + "required": [ + "currentIndex", + "eip", + "frontendPort", + "instanceId", + "protocol", + "realServer" + ] + } + }, + "requestId": { + "type": "string", + "example": "C4E18928-24FF-3B2F-B3EF-D60B133FED33" + }, + "secRealServers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "currentIndex": { + "type": "integer", + "example": 1 + }, + "eip": { + "type": "string", + "example": "54.43.54.12" + }, + "frontendPort": { + "type": "integer", + "example": 80 + }, + "instanceId": { + "type": "string", + "example": "ddos-25d832be-05c0-4d31-be38-e880f6d64e77" + }, + "protocol": { + "type": "string", + "enum": ["tcp", "udp"], + "example": "tcp" + }, + "realServer": { + "type": "string", + "example": "58.47.123.4" + } + }, + "required": [ + "currentIndex", + "eip", + "frontendPort", + "instanceId", + "protocol", + "realServer" + ] + } + } + }, + "required": [ + "backendPort", + "bakMode", + "currentIndex", + "forwardProtocol", + "frontendPort", + "instanceId", + "priRealServers", + "requestId", + "secRealServers" + ] + } + }, + "required": ["code", "data"] + } + } + } + }, + "400": { + "description": "Invalid request" + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/network/protect/{uid}/describeHealthCheckList": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "View Health Check", + "operationId": "ViewHealthCheck", + "parameters": [ + { + "in": "path", + "name": "uid", + "schema": { + "type": "string" + }, + "example": "292733187643212169", + "required": true, + "description": "DNS account UID" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "instanceId": { + "type": "string", + "example": "ddos-6856bb46-90f4-436f-9578-3aef8a8f3312" + }, + "protocol": { + "type": "string", + "enum": ["tcp", "udp"], + "example": "tcp" + }, + "frontendPort": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "example": 8080 + }, + "uid": { + "type": "string", + "example": "292733187643212169" + } + }, + "required": ["instanceId", "protocol", "frontendPort", "uid"] + } + } + } + }, + "responses": { + "200": { + "description": "Health Check Detail", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "data": { + "type": "object", + "properties": { + "healthCheckList": { + "type": "array", + "items": { + "type": "object", + "properties": { + "frontendPort": { + "type": "integer" + }, + "healthCheck": { + "type": "object", + "properties": { + "port": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "example": 8010 + }, + "timeout": { + "type": "integer", + "minimum": 1, + "maximum": 30, + "example": 5 + }, + "interval": { + "type": "integer", + "minimum": 1, + "maximum": 30, + "example": 15 + }, + "up": { + "type": "integer", + "minimum": 1, + "maximum": 10, + "example": 3 + }, + "down": { + "type": "integer", + "minimum": 1, + "maximum": 10, + "example": 3 + } + }, + "required": [ + "port", + "timeout", + "interval", + "up", + "down" + ] + }, + "instanceId": { + "type": "string", + "example": "ddos-25d832be-05c0-4d31-be38-e880f6d64e12" + }, + "protocol": { + "type": "string" + } + }, + "required": [ + "frontendPort", + "healthCheck", + "instanceId", + "protocol" + ] + } + }, + "requestId": { + "type": "string" + } + }, + "required": ["healthCheckList", "requestId"] + } + }, + "required": ["code", "data"] + } + } + } + }, + "400": { + "description": "Invalid request" + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/network/protect/{uid}/configLayer4RuleBakModePolicy": { + "post": { + "tags": ["Anti-DDoS"], + "summary": "Config Back-to-origin Settings", + "operationId": "ConfigBackToOriginSettings", + "parameters": [ + { + "in": "path", + "name": "uid", + "schema": { + "type": "string" + }, + "example": "292733187643212169", + "required": true, + "description": "DNS account uid" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "uid": { + "type": "string", + "example": 292733187643212160 + }, + "instanceId": { + "type": "string", + "example": "ddos-25d832be-05c0-4d31-be38-e880f6d64e12" + }, + "bakMode": { + "type": "integer", + "enum": [0, 1], + "example": 1 + }, + "protocol": { + "type": "string", + "enum": ["tcp", "udp"], + "example": "tcp" + }, + "frontendPort": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "example": 80 + }, + "backendPort": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "example": 80 + }, + "currentRsIndex": { + "type": "integer", + "enum": [1, 2], + "example": 1 + }, + "priRealServer": { + "type": "string", + "example": "121.70.168.58" + }, + "secRealServer": { + "type": "string", + "example": "121.70.168.58" + } + }, + "required": [ + "uid", + "instanceId", + "bakMode", + "protocol", + "frontendPort" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Configured successfully" + }, + "400": { + "description": "Invalid request" + } + } + } + }, + "/console_secure/antiddos/v1/cad/config/dns/{uid}/network-diagram.yaml": { + "get": { + "tags": ["Anti-DDoS"], + "summary": "Retrieve Network Diagram", + "operationId": "GetDNSNetworkDiagram", + "parameters": [ + { + "name": "uid", + "in": "path", + "description": "The DNS UID.", + "required": true, + "schema": { + "type": "string" + }, + "example": 292733182391123140 + }, + { + "name": "instanceId", + "in": "query", + "description": "The instance ID", + "required": true, + "schema": { + "type": "string" + }, + "example": "ddos-dummy" + }, + { + "name": "domain", + "in": "query", + "description": "The domain, e.g., www.example.com.", + "schema": { + "type": "string" + }, + "example": "example.com" + } + ], + "responses": { + "200": { + "description": "Successful response, HTML string content.", + "content": { + "application/json": { + "schema": { + "type": "string", + "example": "..." + } + } + } + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/console_secure/antiddos/v1/cad/orderSteps/{id}": { + "get": { + "tags": ["Anti-DDoS"], + "summary": "Retrieve an MCA order step by DNS ID", + "operationId": "GetMCAOrderStepById", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The unique DNS ID of the MCA order step to retrieve.", + "required": true, + "schema": { + "type": "number" + } + } + ], + "responses": { + "200": { + "description": "A successful response containing the MCA order step details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MCAOrderStepsResponse" + } + } + } + }, + "404": { + "description": "MCA order step is not found" + }, + "500": { + "description": "An internal server error occurred while processing the request." + } + } + }, + "put": { + "tags": ["Anti-DDoS"], + "summary": "Update an MCA order step by DNS ID", + "operationId": "UpdateMCAOrderStepById", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The unique DNS ID of the MCA order step to update.", + "required": true, + "schema": { + "type": "number" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MCAOrderStepsUpdateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "A successful response containing the MCA order step details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MCAOrderStepsResponse" + } + } + } + }, + "400": { + "description": "Missing or Invalid MCA order step value" + }, + "500": { + "description": "An internal server error occurred while processing the request." + } + } + }, + "post": { + "tags": ["Anti-DDoS"], + "summary": "Create a new MCA order step by DNS ID", + "operationId": "CreateMCAOrderStep", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The unique DNS ID of the MCA order step.", + "required": true, + "schema": { + "type": "number" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MCAOrderStepsUpdateRequest" + } + } + } + }, + "responses": { + "201": { + "description": "Successfully created a new MCA order step.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MCAOrderStepsResponse" + } + } + } + }, + "400": { + "description": "Bad Request. The request body is invalid or missing required fields." + }, + "500": { + "description": "An internal server error occurred while processing the request." + } + } + } + }, + "/console_secure/antiddos/v1/tpc/attributes": { + "get": { + "tags": ["Anti-DDoS"], + "summary": "Get TPC dynamic attributes(order options)", + "description": "Get TPC dynamic attributes(order options)", + "operationId": "ConsoleSecureGetTPCDynamicAttributes", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "12341234-1234-1234-1234-123412341234", + "description": "Attribute ID" + }, + "type": { + "type": "string", + "example": "CMA", + "description": "For product type" + } + }, + "additionalProperties": { + "type": "array", + "description": "Array of options", + "items": { + "type": "object" + }, + "example": [ + { + "label": "100Mbps", + "value": "100", + "enable": true + }, + { + "label": "500Mbps", + "value": "500", + "enable": true + } + ] + } + } + } + } + } + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/api/company/{companyUsername}/connections/directConnectPartner/AWS/layer2": { + "put": { + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "required": [ + "name", + "srcPortId", + "destPortId", + "speed", + "partner", + "type", + "duration", + "durationUnit", + "paymentType" + ], + "example": { + "name": "amazon", + "srcPortId": "5de6f8601693740b2c852398", + "destPortId": "5de6f85d1693740b2c852394", + "speed": 100, + "partner": { + "account": "xx-3434-yy-6" + }, + "type": "LAYER2", + "duration": 1, + "durationUnit": "y", + "paymentType": "invoice", + "evergreen": true + }, + "properties": { + "name": { + "type": "string", + "description": "The name of the AWS Cloud." + }, + "srcPortId": { + "type": "string", + "description": "The portId of the port from your company that you want to connect from." + }, + "destPortId": { + "type": "string", + "description": "The AWS destination port ID." + }, + "speed": { + "type": "integer", + "description": "The speed of the connection in Mbps." + }, + "partner": { + "type": "object", + "properties": { + "account": { + "type": "string", + "example": "xx-3434-yy-6", + "description": "Your AWS account ID." + } + }, + "required": ["account"] + }, + "type": { + "type": "string", + "description": "Type of connection.", + "enum": ["LAYER2"] + }, + "duration": { + "type": "integer", + "description": "The duration of the connection." + }, + "durationUnit": { + "type": "string", + "enum": ["y", "m"], + "description": "The unit of duration." + }, + "classOfService": { + "type": "string", + "enum": ["SILVER"], + "description": "The class of service of the connection." + }, + "paymentType": { + "type": "string", + "enum": ["invoice"], + "description": "The payment method used." + }, + "evergreen": { + "type": "boolean", + "description": "Set to `true` if you choose to have your connection and payment continue on a month to month basis at the end of your selected duration, else set to `false`." + }, + "discountCode": { + "type": "string" + } + } + } + } + } + }, + "parameters": [ + { + "description": "The username of the company creating the connection.", + "in": "path", + "example": "acme", + "name": "companyUsername", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": {} + } + }, + "tags": ["AWS Direct Connect"], + "description": "Prerequisites\n\n* Your company has been verified on the Console Connect platform.\n\n* The authenticated user account has Network Admin permissions.\n\n* The source port is ACTIVE.\n\n* You are requesting paymentType \"invoice\", or, if requesting paymentType \"plan\", the subscription associated with the port has sufficient entitlement to complete the request.", + "operationId": "create-an-AWS-Direct-Connect-Partner-Connection", + "summary": "Create a Layer 2 AWS Direct Connect Partner connection" + } + }, + "/api/company/{username}/connections/directConnectPartner/AZURE/layer2/create": { + "put": { + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": {} + } + }, + "summary": "Create Azure Layer 2 connection", + "operationId": "Create-Azure-connection", + "description": "After creating a connection request via the Azure dashboard and generating a service key, create the connection by submitting the service key, speed, name and source port.\n\nAzure DirectConnect Partner connections require redundancy - there are always two destination ports.\n\n> Because Azure connections require redundancy, this endpoint creates a\n> 'GROUP_LAYER2' connection that groups two 'LAYER2' subconnections rather \n> than a regular 'LAYER2' connection.", + "tags": ["Azure ExpressRoute"], + "parameters": [ + { + "name": "username", + "description": "The username of the company.", + "in": "path", + "example": "Acme", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/invoice" + } + ] + } + } + } + } + } + }, + "/api/company/{username}/connections/directConnectPartner/AZURE/layer2/{connectionId}/peering/{peeringType}(PRIVATE|MICROSOFT)": { + "post": { + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "schema": { + "type": "object", + "example": { + "peerAsn": 54321, + "vlanId": 1000, + "primaryPeerSubnet": "10.0.1.0/30", + "secondaryPeerSubnet": "10.0.2.0/30", + "azureAsn": 12345, + "primaryAzurePort": "azure1", + "secondaryAzurePort": "azure2", + "state": "Enabled" + } + } + } + } + } + }, + "summary": "Update an Azure connection's peering config", + "operationId": "Update-&-create-an-Azure-connection-peering-config", + "description": "Use this endpoint to update your peering information with the two Azure services:\n\nType | Description\n----------|---------------------\nPRIVATE | Private Azure services, not available via public IP address. Examples include Azure virtual machines and cloud services hosted within a virtual network.\nMICROSOFT | Azure services available via public IP address. Examples include Azure storage, Azure SQL databases Azure Active Directory and Azure websites.\n\n> You can not call this endpoint before the connection has been provisioned (before the connection status is `ACTIVE`)", + "tags": ["Azure ExpressRoute"], + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The username of the company that created the connection.", + "required": true, + "example": "Acme", + "schema": { + "type": "string" + } + }, + { + "name": "connectionId", + "in": "path", + "description": "The ObjectID from the _Create Azure connection_ endpoint.", + "required": true, + "example": "507f1f77bcf86cd799439011", + "schema": { + "type": "string" + } + }, + { + "name": "peeringType", + "in": "path", + "description": "The type of peering i.e Private Azure (PRIVATE), Public Azure (PUBLIC) or Microsoft / Office365 (MICROSOFT)", + "required": true, + "example": "PRIVATE", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "vlanId": { + "type": "integer", + "description": "The VLAN ID of the connection. This is used to identify the connection on the Azure side.", + "example": 10 + }, + "peerAsn": { + "type": "integer", + "description": "The Autonomous System Number (ASN) of the peer. This is used to identify the peer on the Azure side.", + "example": 2342 + }, + "primaryPeerSubnet": { + "type": "string", + "description": "The primary subnet of the peer. This is used to identify the primary connection endpoint on the peer side.", + "example": "111.22.3.5/30" + }, + "secondaryPeerSubnet": { + "type": "string", + "description": "The secondary subnet of the peer. This is used to identify the secondary connection endpoint on the peer side.", + "example": "111.22.3.6/30" + } + } + } + } + } + } + }, + "get": { + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "schema": { + "type": "object", + "example": { + "peerAsn": 54321, + "vlanId": 1000, + "primaryPeerSubnet": "10.0.1.0/30", + "secondaryPeerSubnet": "10.0.2.0/30", + "azureAsn": 12345, + "primaryAzurePort": "azure1", + "secondaryAzurePort": "azure2", + "state": "Enabled" + } + } + } + } + } + }, + "summary": "Read an Azure connection's peering config", + "operationId": "Read-an-Azure-connection-peering-config", + "description": "Read an Azure connection's peering config from the system. Note that if you have recently changed this information in the Azure dashboard it may take some time to propagate back to Console Connect.\n\n#### syncStatus\n\nPeering sync status can be one of the following values:\n\nsyncStatus | Description\n-----------|---------------------\nPENDING | The request has been sent to the system\nSYNCING | The system is syncing the configuration with Azure\nSYNCED | The configuration is active in Azure\n\n> Note that 'advertisedPublicPrefixes' and 'routingRegistryName' are only used for configs of type `MICROSOFT`.", + "tags": ["Azure ExpressRoute"], + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The username of the company that created the connection.", + "required": true, + "example": "Acme", + "schema": { + "type": "string" + } + }, + { + "name": "connectionId", + "in": "path", + "description": "The ObjectID from the _Create Azure connection_ endpoint.", + "required": true, + "example": "507f1f77bcf86cd799439011", + "schema": { + "type": "string" + } + }, + { + "name": "peeringType", + "in": "path", + "description": "The type of peering i.e Private Azure (PRIVATE), Public Azure (PUBLIC) or Microsoft / Office365 (MICROSOFT)", + "required": true, + "example": "PRIVATE", + "schema": { + "type": "string" + } + } + ] + }, + "delete": { + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": {} + } + }, + "summary": "Delete an Azure connection's peering config", + "operationId": "Delete-an-Azure-connection-peering-config", + "description": "", + "tags": ["Azure ExpressRoute"], + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The username of the company that created the connection.", + "required": true, + "example": "Acme", + "schema": { + "type": "string" + } + }, + { + "name": "connectionId", + "in": "path", + "description": "The ObjectID from the _Create Azure connection_ endpoint.", + "required": true, + "example": "507f1f77bcf86cd799439011", + "schema": { + "type": "string" + } + }, + { + "name": "peeringType", + "in": "path", + "description": "The type of peering i.e Private Azure (PRIVATE), Public Azure (PUBLIC) or Microsoft / Office365 (MICROSOFT)", + "required": true, + "example": "PRIVATE", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/company/{username}/connections/directConnectPartner/AZURE/serviceKey": { + "post": { + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "schema": { + "type": "object", + "example": { + "azureConfig": { + "serviceKey": null, + "primary": "HKB-PCCW-06GMR-CIS-1-PRI-A", + "secondary": "HKB-PCCW-06GMR-CIS-2-SEC-A", + "provisionState": "NotProvisioned", + "status": "Enabled", + "bandwidth": 50, + "stag": 66 + }, + "primaryPort": {}, + "secondaryPort": {} + } + } + } + } + } + }, + "summary": "Verify the key", + "operationId": "Verify-the-key", + "description": "You can use this endpoint to verify and retrieve information from the service key before you create the connection.", + "tags": ["Azure ExpressRoute"], + "parameters": [ + { + "name": "username", + "description": "The username of the company.", + "in": "path", + "example": "Acme", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "example": { + "azureServiceKey": "example-service-key" + }, + "schema": { + "type": "object", + "properties": { + "azureServiceKey": { + "type": "string", + "description": "Service key provided by Azure" + } + } + } + } + } + } + } + }, + "/app-user/{companyId}/connections/cloud/IBM": { + "post": { + "parameters": [ + { + "description": "The ID of the company creating the connection.", + "example": "5e4cb418ab1dbe8c8476163b", + "name": "companyId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the new connection." + }, + "srcPortId": { + "type": "string", + "description": "The source port ID." + }, + "destPortId": { + "type": "string", + "description": "The source port ID." + }, + "speed": { + "type": "number", + "description": "The connection speed in Mbps." + }, + "paymentType": { + "type": "string", + "enum": ["creditcard", "invoice"], + "description": "The payment method." + }, + "duration": { + "type": "number", + "description": "The duration the service was ordered for, in conjunction with durationUnit. The maximum duration by unit is: days: 6; weeks: 3; month: 36; years:3" + }, + "durationUnit": { + "type": "string", + "enum": ["d", "w", "m", "y"], + "description": "The unit of duration the service was ordered for, in conjunction with duration. 'd' for days, 'w' for weeks, 'm' for months, 'y' for years." + }, + "partnerAccountId": { + "type": "string", + "description": "The IBM account id" + }, + "discountCode": { + "type": "string" + } + }, + "example": { + "duration": 6, + "durationUnit": "d", + "paymentType": "plan", + "partnerAccountId": "62f317aea1562f317aea1c3", + "srcPortId": "10274392jd91023j0", + "destPortId": "IBM_PORT_ID", + "speed": 50, + "name": "my connection" + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "example": { + "results": { + "connectionProvisioningId": "fd64aa97", + "connection": { + "id": "5e4cb41e8c47508c84bdb7af", + "srcCompanyId": "5e4cb418ab1dbe8c8476163b" + } + } + } + } + } + }, + "400": { + "description": "Bad Request", + "headers": {}, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "error": { + "type": "object", + "properties": { + "code": { + "type": "number" + }, + "message": { + "type": "string" + } + } + } + } + }, + "examples": { + "idReqired": { + "value": { + "error": { + "code": 400, + "message": "partnerAccountId is a required arg" + } + } + }, + "srcPortNotActive": { + "value": { + "error": { + "code": 400, + "message": "Cannot find an ACTIVE source port" + } + } + }, + "destPortNotActive": { + "value": { + "error": { + "code": 400, + "message": "Cannot find an ACTIVE destination port" + } + } + } + } + } + } + } + }, + "tags": ["IBM Cloud Direct Link"], + "description": "Prerequisites\n\n* Your company has been verified on the Console Connect platform.\n\n* The authenticated user account has Network Admin permissions.\n\n* The source port is ACTIVE and has enough available capacity to support the new connection.\n\n* You are requesting paymentType \"plan\" (invoice not supported yet), and have sufficient entitlements on your plan to support the connection.", + "operationId": "Create-a-new-IBM-Cloud-Direct-Link", + "summary": "Create a new IBM Cloud Direct Link" + } + }, + "/app-user/{companyId}/connections/{connectionId}": { + "delete": { + "parameters": [ + { + "description": "The ID of the company deleting the connection.", + "example": "5e4cb418ab1dbe8c8476163b", + "name": "companyId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the connection to be deleted.", + "example": "5e4cb41e8c47508c84bdb7af", + "name": "connectionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": {} + }, + "400": { + "description": "Bad Request", + "headers": {} + } + }, + "tags": ["IBM Cloud Direct Link"], + "description": "Using this endpoint will \n\n* Delete your connection between the Console Connect plaftorm and IBM Cloud\n\n* Request the deletion of the IBM Direct Link on your behalf\n\nRemember to approve the deletion request in your IBM Cloud Dashboard to avoid extra billing charges.", + "operationId": "Delete-an-IBM-Cloud-Direct-Link", + "summary": "Delete an IBM Cloud Direct Link" + } + }, + "/api/company/{companyName}/connections/directConnectPartner/GCE/layer2": { + "put": { + "parameters": [ + { + "description": "The username of the company creating the connection.", + "in": "path", + "example": "Acme", + "name": "companyName", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The connection type, typically 'LAYER_2'." + }, + "name": { + "type": "string", + "description": "The name of the new connection." + }, + "srcPortId": { + "type": "string", + "description": "The source port id." + }, + "destPortId": { + "type": "string", + "description": "The destination port id" + }, + "speed": { + "type": "number", + "description": "The speed of the connection in Mbps." + }, + "paymentType": { + "type": "string", + "enum": ["creditcard", "invoice"], + "description": "The payment method." + }, + "partner": { + "type": "object", + "properties": { + "region": { + "type": "string", + "description": "" + }, + "pairingKeys": { + "type": "array", + "items": { + "type": "string", + "description": "" + } + }, + "destPortIds": { + "type": "array", + "items": { + "type": "string", + "description": "" + } + } + } + }, + "discountCode": { + "type": "string" + } + } + }, + "example": { + "type": "LAYER2", + "name": "Google Connection", + "srcPortId": "5de874f10d83430256e31f8c", + "destPortId": "5de874ee0d83430256e31f88", + "paymentType": "invoice", + "speed": 500, + "partner": { + "destPortIds": [ + "5de874ee0d83430256e31f88", + "5de874ee0d83430256e31f89" + ], + "pairingKeys": [ + "765ebb97-329e-43a8-9b94-8b0b4db7ab2d/europe-west1/1", + "69ffada6-a3c1-42c6-ad84-8794d6be30bd/europe-west1/2" + ], + "region": "europe-west1" + } + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "id": "5de874f229177602561b2bb0", + "version": "1", + "srcPortId": "5de874f10d83430256e31f8c", + "destPortId": "5de874ee0d83430256e31f88", + "srcControllerId": null, + "destControllerId": null, + "srcCompanyId": "5de874ef9c84f90256ba370f", + "destCompanyId": "5de874e89c84f90256ba370d", + "srcCompany": { + "createdAt": "2019-12-05T03:09:35.388Z", + "updatedAt": "2019-12-05T03:09:38.130Z", + "username": "company1", + "__v": 0, + "popIds": [], + "stats": { + "members": 1, + "interconnections": 0, + "followers": 0, + "following": 0, + "privateArticles": 0, + "privateEvents": 0, + "privatePosts": 0, + "articles": 0, + "events": 0, + "posts": 0 + }, + "company": { + "parentIds": [], + "fax": null, + "phone": null, + "addresses": [], + "privacy": [{}], + "zip": null, + "state": null, + "city": null, + "address": null, + "last": null, + "first": null, + "clientId": null, + "regionalInternetRegistry": [], + "businessRegistrationCertRejectedReason": null, + "businessRegistrationCertVerified": "VERIFIED", + "businessRegistrationCertUploadedAt": null, + "businessRegistrationCertReference": null, + "registeredName": null, + "dateFounded": null, + "companySize": null, + "businessType": null, + "industry": null, + "emailDomains": [{}], + "website": null + }, + "system": { + "welcomeMessage": null + }, + "deletedAt": null, + "deleted": false, + "verified": true, + "tags": [], + "status": "ACTIVE", + "capabilities": { + "layer3Regions": [], + "layer2Regions": [{}], + "layer3Metros": [], + "layer2Metros": [{}], + "layer3": false, + "layer2": true + }, + "displayOrder": -299, + "officeAddress": null, + "phone": null, + "groups": [], + "optIntoMarketingEmail": false, + "location": null, + "legalEntityId": null, + "summary": null, + "headline": null, + "background": null, + "avatarId": null, + "avatar": null, + "name": "wee-care", + "isSupport": false, + "type": "COMPANY", + "companies": [], + "id": "5de874ef9c84f90256ba370f", + "online": false + }, + "destCompany": { + "createdAt": "2019-12-05T03:09:28.490Z", + "updatedAt": "2019-12-05T03:09:34.967Z", + "username": "gce", + "__v": 1, + "popIds": [], + "stats": { + "members": 1, + "interconnections": 0, + "followers": 0, + "following": 0, + "privateArticles": 0, + "privateEvents": 0, + "privatePosts": 0, + "articles": 0, + "events": 0, + "posts": 0 + }, + "directConnectPartner": { + "type": "GCE", + "verified": true + }, + "company": { + "parentIds": [], + "fax": null, + "phone": null, + "addresses": [], + "privacy": [{}], + "zip": null, + "state": null, + "city": null, + "address": null, + "last": null, + "first": null, + "clientId": null, + "regionalInternetRegistry": [], + "businessRegistrationCertRejectedReason": null, + "businessRegistrationCertVerified": "VERIFIED", + "businessRegistrationCertUploadedAt": null, + "businessRegistrationCertReference": null, + "registeredName": null, + "dateFounded": null, + "companySize": null, + "businessType": null, + "industry": null, + "emailDomains": [{}], + "website": null + }, + "system": { + "welcomeMessage": null + }, + "deletedAt": null, + "deleted": false, + "verified": true, + "tags": [], + "status": "ACTIVE", + "capabilities": { + "layer3Regions": [], + "layer2Regions": [{}], + "layer3Metros": [], + "layer2Metros": [{}], + "layer3": false, + "layer2": true + }, + "displayOrder": -299, + "officeAddress": null, + "phone": null, + "groups": [], + "optIntoMarketingEmail": false, + "location": null, + "legalEntityId": null, + "summary": null, + "headline": null, + "background": null, + "avatarId": null, + "avatar": null, + "name": "gce", + "isSupport": false, + "type": "COMPANY", + "companies": [], + "id": "5de874e89c84f90256ba370d", + "online": false + }, + "srcRegionId": "", + "destRegionId": "", + "name": "Google Connection", + "request": { + "status": null, + "destMetroId": null, + "speed": null, + "srcApproval": null, + "destApproval": null, + "updatedAt": null, + "read": false + }, + "status": "ACTIVE", + "paymentType": "plan", + "type": "GROUP_LAYER2", + "partner": { + "speed": 500, + "type": "GCE", + "subtype": "NONE", + "errorMessage": null, + "connectionId": null, + "interconnectId": null, + "account": null, + "asnId": null, + "destPortIds": [ + "5de874ee0d83430256e31f88", + "5de874ee0d83430256e31f89" + ], + "crossconnectionStatus": "ENABLED", + "provisioningStatus": "PROVISIONED", + "syncStatus": "NONE", + "pairingKey": null, + "pairingKeys": [], + "secretId": null, + "secretKey": null, + "gatewayId": null, + "vpcId": null, + "region": "hk" + }, + "durationUnit": null, + "duration": null, + "tag": null, + "destTag": null, + "srcVlan": { + "service": null, + "customer": [] + }, + "destVlan": { + "service": null, + "customer": [] + }, + "srcUntagged": false, + "destUntagged": false, + "srcQinQ": false, + "destQinQ": false, + "srcConfigTag": null, + "destConfigTag": null, + "speed": { + "value": 400, + "name": "400 Mbps" + }, + "errorReason": null, + "cdrBillingType": "METRO", + "parentId": null, + "subconnectionIds": { + "primary": ["5de874f229177602561b2bae"], + "secondary": ["5de874f229177602561b2baf"] + }, + "importedAt": null, + "importer": null, + "statusChangedAt": "2019-12-05T03:09:38.796Z", + "activeChangedAt": null, + "firstActiveAt": null, + "maintenanceMode": false, + "updatedAt": "2019-12-05T03:09:38.861Z", + "createdAt": "2019-12-05T03:09:38.861Z", + "deleted": false, + "deletedAt": null, + "scheduled": false, + "scheduledTaskList": [], + "paymentTransactionId": null, + "salesRecordId": null, + "payg": false, + "billingType": null, + "classOfService": "BRONZE", + "typeFriendly": "Google Direct Connect", + "isReceiver": false, + "isCreator": true, + "subconnections": [ + { + "id": "5de874f229177602561b2bae", + "version": "1", + "srcPortId": "5de874f10d83430256e31f8c", + "destPortId": "5de874ee0d83430256e31f88", + "srcControllerId": null, + "destControllerId": null, + "srcCompanyId": "5de874ef9c84f90256ba370f", + "destCompanyId": "5de874e89c84f90256ba370d", + "srcCompany": [{}], + "destCompany": [{}], + "srcRegionId": null, + "destRegionId": null, + "name": "Google Connection - Sub 0", + "request": [{}], + "status": "ACTIVE", + "paymentType": "plan", + "type": "LAYER2", + "partner": [{}], + "durationUnit": null, + "duration": null, + "tag": null, + "destTag": null, + "srcVlan": [{}], + "destVlan": [{}], + "srcUntagged": false, + "destUntagged": false, + "srcQinQ": false, + "destQinQ": false, + "srcConfigTag": null, + "destConfigTag": null, + "speed": [{}], + "errorReason": null, + "cdrBillingType": "METRO", + "alertUtilizationThresholdUserIds": null, + "alertUtilization": null, + "parentId": "5de874f229177602561b2bb0", + "subconnectionIds": [{}], + "importedAt": null, + "importer": null, + "statusChangedAt": "2019-12-05T03:09:38.866Z", + "activeChangedAt": "2019-12-05T03:09:38.866Z", + "firstActiveAt": "2019-12-05T03:09:38.866Z", + "maintenanceMode": false, + "updatedAt": "2019-12-05T03:09:38.866Z", + "createdAt": "2019-12-05T03:09:38.815Z", + "deleted": false, + "deletedAt": null, + "scheduled": false, + "scheduledTaskList": [], + "paymentTransactionId": null, + "salesRecordId": null, + "payg": null, + "billingType": null, + "classOfService": "BRONZE", + "srcVlanRequest": null, + "destVlanRequest": null, + "typeFriendly": "Google Direct Connect", + "isReceiver": false, + "isCreator": true, + "subconnections": [], + "destPort": [{}], + "srcTag": null, + "destPorts": [{}], + "srcPorts": [], + "port": [{}] + }, + { + "id": "5de874f229177602561b2baf", + "version": "1", + "srcPortId": "5de874f10d83430256e31f8c", + "destPortId": "5de874ee0d83430256e31f89", + "srcControllerId": null, + "destControllerId": null, + "srcCompanyId": "5de874ef9c84f90256ba370f", + "destCompanyId": "5de874e89c84f90256ba370d", + "srcCompany": [{}], + "destCompany": [{}], + "srcRegionId": null, + "destRegionId": null, + "name": "Google Connection - Sub 1", + "request": [{}], + "status": "ACTIVE", + "paymentType": "plan", + "type": "LAYER2", + "partner": [{}], + "durationUnit": null, + "duration": null, + "tag": null, + "destTag": null, + "srcVlan": [{}], + "destVlan": [{}], + "srcUntagged": false, + "destUntagged": false, + "srcQinQ": false, + "destQinQ": false, + "srcConfigTag": null, + "destConfigTag": null, + "speed": [{}], + "errorReason": null, + "cdrBillingType": "METRO", + "alertUtilizationThresholdUserIds": null, + "alertUtilization": null, + "parentId": "5de874f229177602561b2bb0", + "subconnectionIds": [{}], + "importedAt": null, + "importer": null, + "statusChangedAt": "2019-12-05T03:09:38.867Z", + "activeChangedAt": "2019-12-05T03:09:38.867Z", + "firstActiveAt": "2019-12-05T03:09:38.867Z", + "maintenanceMode": false, + "updatedAt": "2019-12-05T03:09:38.867Z", + "createdAt": "2019-12-05T03:09:38.825Z", + "deleted": false, + "deletedAt": null, + "scheduled": false, + "scheduledTaskList": [], + "paymentTransactionId": null, + "salesRecordId": null, + "payg": null, + "billingType": null, + "classOfService": "BRONZE", + "srcVlanRequest": null, + "destVlanRequest": null, + "typeFriendly": "Google Direct Connect", + "isReceiver": false, + "isCreator": true, + "subconnections": [], + "destPort": [{}], + "srcTag": null, + "destPorts": [{}], + "srcPorts": [], + "port": [{}] + } + ], + "destPort": { + "dcpCompanyId": null, + "name": "gce1", + "speed": 1000, + "speedOverprovisioningFactor": 1, + "singleService": false, + "tags": [], + "locationId": null, + "dataCenterFacilityId": "5126c9f1111e15a24a066130", + "popId": null, + "metroId": "d466b388d3e9ee0a92177910", + "status": "ACTIVE", + "linkState": "UNKNOWN", + "linkStateUpSince": null, + "linkStateSyncedAt": null, + "type": "DCP", + "mediaType": "SMF", + "partner": { + "type": "GCE", + "regionNames": [{}], + "connectionSpeeds": [{}], + "partnerPort": "port" + }, + "ip": { + "ipv4": null, + "ipv6": null + }, + "capabilities": { + "model6Limit": false, + "model6LimitNumber": null + }, + "activeChangedAt": null, + "firstActiveAt": null, + "updatedAt": "2019-12-05T03:09:34.409Z", + "createdAt": "2019-12-05T03:09:34.409Z", + "deleted": false, + "deletedAt": null, + "importedAt": null, + "importer": null, + "salesRecordId": null, + "paymentType": "plan", + "payg": false, + "onboarded": null, + "onboardedBy": null, + "onboardedAt": null, + "onboardedStatus": "AWAITING_PROCESSING", + "onboardedStatusDetail": null, + "onboardedDeviceName": null, + "onboardedInterfaceName": null, + "onboardedAllocatedBandwidth": null, + "billingId": null, + "vlanRanges": [], + "iciLink": "A", + "supportedServices": [], + "cosTransparency": null, + "cosMapping": { + "GOLD": [], + "SILVERPLUS": [], + "SILVER": [], + "BRONZE": [] + }, + "id": "5de874ee0d83430256e31f88", + "accessCircuit": null, + "companyId": "5de874e89c84f90256ba370d" + }, + "srcTag": null, + "destPorts": [ + { + "dcpCompanyId": null, + "name": "gce1", + "speed": 1000, + "speedOverprovisioningFactor": 1, + "singleService": false, + "tags": [], + "locationId": null, + "dataCenterFacilityId": "5126c9f1111e15a24a066130", + "popId": null, + "metroId": "d466b388d3e9ee0a92177910", + "status": "ACTIVE", + "linkState": "UNKNOWN", + "linkStateUpSince": null, + "linkStateSyncedAt": null, + "type": "DCP", + "mediaType": "SMF", + "partner": [{}], + "ip": [{}], + "capabilities": [{}], + "activeChangedAt": null, + "firstActiveAt": null, + "updatedAt": "2019-12-05T03:09:34.409Z", + "createdAt": "2019-12-05T03:09:34.409Z", + "deleted": false, + "deletedAt": null, + "importedAt": null, + "importer": null, + "salesRecordId": null, + "paymentType": "plan", + "payg": false, + "onboarded": null, + "onboardedBy": null, + "onboardedAt": null, + "onboardedStatus": "AWAITING_PROCESSING", + "onboardedStatusDetail": null, + "onboardedDeviceName": null, + "onboardedInterfaceName": null, + "onboardedAllocatedBandwidth": null, + "billingId": null, + "vlanRanges": [], + "iciLink": "A", + "supportedServices": [], + "cosTransparency": null, + "cosMapping": [{}], + "id": "5de874ee0d83430256e31f88", + "accessCircuit": null, + "companyId": "5de874e89c84f90256ba370d" + }, + { + "dcpCompanyId": null, + "name": "gce2", + "speed": 1000, + "speedOverprovisioningFactor": 1, + "singleService": false, + "tags": [], + "locationId": null, + "dataCenterFacilityId": "5126c9f1111e15a24a066130", + "popId": null, + "metroId": "d466b388d3e9ee0a92177910", + "status": "ACTIVE", + "linkState": "UNKNOWN", + "linkStateUpSince": null, + "linkStateSyncedAt": null, + "type": "DCP", + "mediaType": "SMF", + "partner": [{}], + "ip": [{}], + "capabilities": [{}], + "activeChangedAt": null, + "firstActiveAt": null, + "updatedAt": "2019-12-05T03:09:34.952Z", + "createdAt": "2019-12-05T03:09:34.952Z", + "deleted": false, + "deletedAt": null, + "importedAt": null, + "importer": null, + "salesRecordId": null, + "paymentType": "plan", + "payg": false, + "onboarded": null, + "onboardedBy": null, + "onboardedAt": null, + "onboardedStatus": "AWAITING_PROCESSING", + "onboardedStatusDetail": null, + "onboardedDeviceName": null, + "onboardedInterfaceName": null, + "onboardedAllocatedBandwidth": null, + "billingId": null, + "vlanRanges": [], + "iciLink": "A", + "supportedServices": [], + "cosTransparency": null, + "cosMapping": [{}], + "id": "5de874ee0d83430256e31f89", + "accessCircuit": null, + "companyId": "5de874e89c84f90256ba370d" + } + ], + "srcPorts": [], + "port": { + "dcpCompanyId": null, + "name": "Vincent", + "speed": 10000, + "speedOverprovisioningFactor": 1, + "singleService": false, + "tags": [], + "locationId": null, + "dataCenterFacilityId": "5126c9f1111e15a24a066130", + "popId": null, + "metroId": "d466b388d3e9ee0a92177910", + "status": "ACTIVE", + "linkState": "UNKNOWN", + "linkStateUpSince": null, + "linkStateSyncedAt": null, + "type": "PHYSICAL", + "mediaType": "SMF", + "partner": { + "type": "NONE", + "connectionSpeeds": [] + }, + "ip": { + "ipv4": null, + "ipv6": null + }, + "capabilities": { + "model6Limit": false, + "model6LimitNumber": null + }, + "activeChangedAt": "2019-12-05T03:09:37.743Z", + "firstActiveAt": "2019-12-05T03:09:37.733Z", + "updatedAt": "2019-12-05T03:09:37.446Z", + "createdAt": "2019-12-05T03:09:37.446Z", + "deleted": false, + "deletedAt": null, + "importedAt": null, + "importer": null, + "salesRecordId": null, + "paymentType": "plan", + "payg": false, + "onboarded": null, + "onboardedBy": null, + "onboardedAt": null, + "onboardedStatus": "AWAITING_PROCESSING", + "onboardedStatusDetail": null, + "onboardedDeviceName": null, + "onboardedInterfaceName": null, + "onboardedAllocatedBandwidth": null, + "billingId": null, + "vlanRanges": [], + "iciLink": "A", + "supportedServices": [], + "cosTransparency": null, + "cosMapping": { + "GOLD": [], + "SILVERPLUS": [], + "SILVER": [], + "BRONZE": [] + }, + "id": "5de874f10d83430256e31f8c", + "accessCircuit": null, + "companyId": "5de874ef9c84f90256ba370f" + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Google Cloud Engine"], + "description": "Prerequisites\n\n* Your company has been verified on the Console Connect platform.\n\n* The authenticated user account has Network Admin permissions.\n\n* The source port is ACTIVE.\n\n* You are requesting paymentType \"invoice\", or, if requesting paymentType \"plan\", the subscription associated with the port has sufficient entitlements to complete the request.\n\nNote: Google Direct Connect Partner connections require redundancy - you must specify two destination ports when creating the connection. You must also specify the region name and two pairing keys from that region.", + "operationId": "create-gce-connection-request", + "summary": "Create a new L2 Google Compute Engine Direct Connect Partner connection" + } + }, + "/app-user/{companyId}/connections/cloud/OVHCLOUD": { + "post": { + "parameters": [ + { + "description": "The ID of the company creating the connection.", + "example": "5e4cb418ab1dbe8c8476163b", + "name": "companyId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the new connection." + }, + "srcPortId": { + "type": "string", + "description": "The source port ID." + }, + "destPortId": { + "type": "string", + "description": "The destination OVH port ID." + }, + "speed": { + "type": "number", + "description": "The connection speed in Mbps." + }, + "paymentType": { + "type": "string", + "enum": ["creditcard", "invoice"], + "description": "The payment method." + }, + "duration": { + "type": "number", + "description": "The duration the service was ordered for, in conjunction with durationUnit. The maximum duration by unit is: days: 6; weeks: 3; month: 36; years: 3" + }, + "durationUnit": { + "type": "string", + "enum": ["d", "w", "m", "y"], + "description": "The unit of duration the service was ordered for, in conjunction with duration. 'd' for days, 'w' for weeks, 'm' for months, 'y' for years." + }, + "partnerAccountId": { + "type": "string", + "description": "The OVH account id" + }, + "discountCode": { + "type": "string" + }, + "classOfService": { + "type": "string", + "description": "Name of the class of service.", + "enum": ["BRONZE", "SILVER", "GOLD"] + }, + "evergreen": { + "type": "boolean" + } + }, + "example": { + "partnerAccountId": "EU.81d5945e-d15f-4439-b236-1e3af7a5e014", + "srcPortId": "60bec23b28634d0015f872fa", + "paymentType": "invoice", + "destPortId": "645c8f1b6ae4e90015d8f53b", + "name": "ovh test", + "speed": 10, + "duration": 1, + "durationUnit": "d", + "classOfService": "SILVER", + "evergreen": true + }, + "required": [ + "partnerAccountId", + "srcPortId", + "paymentType", + "destPortId", + "name", + "speed", + "duration", + "durationUnit", + "classOfService" + ] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "example": { + "results": { + "definitionId": "createL2CloudConnection:194:d7201ada-ac93-11ef-9bb9-260871b20927", + "connection": { + "id": "67481e92106e76d577afbea0", + "srcCompanyId": "5d4d056242fbd3000ab4c01d" + } + } + }, + "schema": { + "type": "object", + "properties": { + "results": { + "type": "object", + "properties": { + "definitionId": { + "type": "string", + "example": "createL2CloudConnection:194:d7201ada-ac93-11ef-9bb9-260871b20927" + }, + "connection": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "67481e92106e76d577afbea0" + }, + "srcCompanyId": { + "type": "string", + "example": "5d4d056242fbd3000ab4c01d" + } + } + } + } + } + } + } + } + } + } + }, + "tags": ["OVHCloud"], + "description": "Prerequisites\n* Your Service key is validated with OVHCloud\n* Your company has been verified on the Console Connect platform.", + "operationId": "Create-a-new-ovh-cloud-Connection", + "summary": "Create a new OVHCloud Connection", + "x-internal": false + } + }, + "/v2/ovh-service-key/validate": { + "post": { + "summary": "Post OVH Service Key Validation", + "description": "Validate your OVH Service Key and recieve associated port information needed to provision a Layer 2 Connection or CloudRouter site with OVH.", + "operationId": "validate-ovh-service-key", + "tags": ["OVHCloud"], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "example": { + "serviceKey": "4405543e-54a1-4b6c-920a-d574b7761645" + }, + "properties": { + "serviceKey": { + "type": "string", + "description": "Service Key provided by OVHCloud" + } + } + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": [ + { + "bandwidth": 1000, + "region": "Paris", + "portId": "695c9f1b6ae2e95013d8f53c", + "bandwidthTiers": [ + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + } + ] + } + ] + } + } + } + }, + "description": "OK" + }, + "400": { + "description": "Invalid service key format" + }, + "404": { + "description": "Service key or associated port not found" + } + } + } + }, + "/app-user/{companyId}/l3vpns": { + "post": { + "parameters": [ + { + "description": "The id of the company", + "example": "5ea242303962644b52fc4346", + "name": "companyId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "example": { + "name": "My CloudRouter", + "paymentMethod": "invoice", + "bandwidth": "500MB", + "duration": { + "quantity": 1, + "unit": "m" + } + }, + "properties": { + "name": { + "type": "string", + "description": "Your CloudRouter name" + }, + "paymentMethod": { + "type": "string", + "description": "Payment Method" + }, + "bandwidth": { + "type": "string", + "description": "Total bandwidth of all sites you intend to attach to this CloudRouter" + }, + "duration": { + "type": "object", + "description": "Minimum contract duration. Service will continue month-to-month after complete", + "properties": { + "quantity": { + "type": "number", + "description": "Quantity of service duration, min duration by unit is 1 month" + }, + "unit": { + "type": "string", + "description": "The unit of duration the service, 'm' for months, 'y' for years", + "example": "m or y" + } + } + }, + "discountCode": { + "type": "string" + } + }, + "required": [ + "name", + "paymentMethod", + "bandwidth", + "duration", + "quantity", + "unit" + ] + } + } + } + }, + "description": "Prerequisites:\n\n* Obtain your company ID. You can call Search API (i.e. **GET** `https://api.consoleconnect.com/api/search?page=1&count=20&type=companies&q={companyName}`). See ***[Search](#tag/Search)*** API for more details. Or you can get both `companyName` and `companyId` in ***[Auth](#tag/Auth/operation/GetLoggedInUser)*** API\n* Use API key in the Authorization Bearer Token (see ***[API Key](#tag/Auth/operation/GetLoggedInUser)***)\n* The authenticated user account has L3VPN Create permissions.\n * The user account has the **'Network Admin'**/**'NETWORKCONTROL'** role. This can be verified or assigned by a user who has '**Account Admin**' or '**User Admin**' permission via the user admin page in Console. You can check ***[here](https://app.consoleconnect.com/settings/members)***.", + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "name": "My CloudRouter", + "status": "CREATING", + "id": "63e48134c3af0500151b59f3", + "paymentMethod": "invoice", + "duration": { + "quantity": 1, + "unit": "m" + }, + "bandwidth": "500MB", + "companyId": "5ea242303962644b52fc4346", + "deletedAt": null, + "createdAt": "2023-02-09T05:14:28.759Z", + "updatedAt": "2023-02-09T05:14:28.760Z" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "summary": "Provision a new CloudRouter", + "operationId": "Provision-a-new-CloudRouter", + "tags": ["CloudRouter"] + }, + "get": { + "parameters": [ + { + "name": "companyId", + "in": "path", + "description": "The ID of the company", + "required": true, + "example": "5e4cb418ab1dbe8c8476163b", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": [ + { + "name": "CloudRouter TEST 01", + "status": "CREATED", + "id": "62e321167cfe65001510a9fb", + "paymentMethod": "invoice", + "duration": { + "quantity": 1, + "unit": "m" + }, + "bandwidth": "500MB", + "companyId": "5d4d056242fbd3000ab4c01d", + "deletedAt": null, + "createdAt": "2022-07-28T23:51:50.063Z", + "updatedAt": "2022-10-28T02:15:25.989Z", + "sites": [], + "calculatedCapacity": { + "total": 500, + "used": 0, + "remaining": 500 + } + }, + { + "name": "CloudRouter Test 02", + "status": "CREATED", + "id": "63e098882befab00152995a8", + "paymentMethod": "invoice", + "duration": { + "quantity": 1, + "unit": "m" + }, + "bandwidth": "1GB", + "companyId": "5d4d056242fbd3000ab4c01d", + "deletedAt": null, + "createdAt": "2023-02-06T06:04:56.110Z", + "updatedAt": "2023-02-06T06:04:57.193Z", + "sites": [ + { + "id": "0949f0d2-d839-4d0c-b325-d2d36fed236e", + "companyId": "5d4d056242fbd3000ab4c01d", + "l3vpnId": "63e098882befcb00152995a8", + "name": "Cloud Router Test Site", + "type": "COMPANY", + "portId": null, + "slVlanId": null, + "rateLimit": { + "rate": 50, + "unit": "Mbps" + }, + "mtu": null, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "redundancySiteType": "primary", + "redundancyLinkedSiteId": null, + "status": "ACTIVE", + "simPoolId": "7a7fcac6-7b70-4609-9fef-90dc20e86f1b", + "company_id": "5d4d056242fbd3000ab4c01d", + "l3vpn_id": "63e098882befcb00152995a8", + "sim_pool_id": "7a7fcac6-7b70-4609-9fef-90dc20e86f1b", + "deleted_at": null, + "created_at": "2023-02-09T04:21:59.243Z", + "updated_at": "2023-02-09T04:24:44.725Z", + "port_id": null, + "peers": [] + } + ], + "calculatedCapacity": { + "total": 1000, + "used": 150, + "remaining": 850 + } + } + ], + "schema": { + "properties": { + "name": { + "type": "string" + }, + "status": { + "type": "string" + }, + "id": { + "type": "string", + "description": "This is the id of the CloudRouter. This is the `vpnId` that you will be using in the Path Parameter when provisioning a new Site on an existing VPN (CloudRouter)" + }, + "paymentMethod": { + "type": "string" + }, + "duration": { + "type": "object" + }, + "bandwidth": { + "type": "string" + }, + "companyId": { + "type": "string" + }, + "deletedAt": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "sites": { + "type": "array", + "description": "Extract necessary information from the CloudRouter sites:\n\n * `companyId` (string): your company id.\n\n * `l3vpnId` (string): this is the Cloud Router's `vpnId`.\n\n * `id` (string): this is the `siteId`. You will be needing this in the Path Parameter when deprovisioning a site of an existing CloudRouter." + }, + "calculatedCapacity": { + "type": "object" + } + }, + "title": "Company Valid Providers response schema", + "type": "object" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "summary": "Query existing CloudRouters", + "operationId": "Query-existing-CloudRouters", + "description": "", + "tags": ["CloudRouter"] + } + }, + "/v2/companies": { + "get": { + "summary": "Find Valid Cloud Providers", + "tags": ["CloudRouter"], + "description": "Get the list of cloud providers.", + "parameters": [ + { + "description": "Should put a conditional value `isCloudProvider` to `true` to query the Valid Cloud Providers (see Example above)", + "example": "{\"where\":{\"isCloudProvider\":true}}", + "in": "query", + "name": "filter", + "schema": { + "type": "object" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "Alibaba": { + "summary": "Alibaba Cloud", + "value": [ + { + "username": "alibaba_cloud", + "name": "Alibaba Cloud", + "type": "COMPANY", + "avatar": null, + "overviewImage": null, + "categories": ["Cloud Service Provider"], + "isCloudProvider": true, + "cloudProviderDetails": { + "cloudType": "ALICLOUD", + "partnerName": "alicloud", + "companyType": "DCP", + "asn": { + "value": 45678, + "range": [] + }, + "bgpAuthority": "PCCWGLOBAL" + }, + "company": { + "addresses": [ + { + "geo": { + "type": "Point", + "coordinates": [] + }, + "registered": true, + "address": "123/F, Address street", + "city": "City", + "state": null, + "zip": "123456", + "country": "CN", + "email": null, + "phone": null + } + ], + "businessType": "Cloud Service Provider", + "website": "https://www.alibabacloud.com/", + "parentIds": [], + "registeredName": "Alibaba Cloud Computing Company", + "businessDevelopmentManagerTypePreference": "DATA" + }, + "portsActive": 20, + "portsPending": 0, + "portsDisabled": 2, + "signedCompanyRefId": 12, + "external": [ + { + "type": "INSIGHT", + "status": "UNSYNCED", + "id": "xxxxx" + }, + { + "type": "HUBSPOT", + "status": "SYNCED", + "id": "xxxxx" + } + ], + "id": "xxxxxxxxxxxxxxxxxxxxxxxxx", + "deletedAt": null, + "createdAt": "2018-10-04T04:39:48.488Z", + "stats": { + "members": 1, + "followers": 13, + "following": 0, + "articles": 0, + "events": 0, + "posts": 0 + }, + "dataCenterFacility": { + "brandId": null + }, + "verified": true, + "tags": ["Cloud service providers", "promoted"], + "location": null, + "summary": "Alibaba Cloud develops highly scalable cloud computing and data management services providing organizations with flexible, cost-effective solutions to meet their networking and information needs. As an Alibaba Cloud Express Connect Partner, Console Connect can provide real-time connectivity to the Alibaba Cloud in all global regions. For more information on how to connect to Alibaba Cloud visit: https://www.consoleconnect.com/clouds/alibaba-cloud/", + "headline": "Instant Provision to Alibaba Cloud", + "background": null, + "avatarId": "5f8xxxxxxxxxxxxxxxxxxxxx", + "oldAvatarId": "5bbxxxxxxxxxxxxxxxxxxxxx", + "verifiedIdentity": true, + "defaultPaymentType": "invoice", + "nnis": [] + } + ] + }, + "Amazon": { + "summary": "Amazon Web Services (AWS)", + "value": [ + { + "username": "amazon", + "name": "Amazon Web Services (AWS)", + "type": "COMPANY", + "avatar": null, + "overviewImage": null, + "categories": ["Cloud Service Provider"], + "isCloudProvider": true, + "cloudProviderDetails": { + "cloudType": "AWS", + "partnerName": "aws", + "companyType": "DCP", + "asn": { + "range": [65432, 65432] + }, + "bgpAuthority": "PCCWGLOBAL" + }, + "company": { + "businessType": "Cloud Service Provider", + "addresses": [ + { + "geo": { + "coordinates": [], + "type": "Point" + }, + "phone": null, + "email": "email@email.com", + "country": "US", + "zip": "123456", + "state": "WA", + "city": "City", + "address": "123/F, Address street", + "registered": false + } + ], + "parentIds": [], + "website": "https://aws.amazon.com", + "businessDevelopmentManagerTypePreference": "DATA" + }, + "portsActive": 42, + "portsPending": 0, + "portsDisabled": 0, + "signedCompanyRefId": 12, + "external": [ + { + "id": "xxxxx", + "status": "SYNCED", + "type": "HUBSPOT" + } + ], + "id": "xxxxxxxxxxxxxxxxxxxxxxxxx", + "deletedAt": null, + "createdAt": "2018-03-13T00:51:41.579Z", + "stats": { + "members": 2, + "followers": 37, + "following": 0, + "articles": 0, + "events": 0, + "posts": 0 + }, + "dataCenterFacility": {}, + "verified": true, + "tags": ["Cloud service providers", "promoted"], + "location": null, + "summary": "Amazon Web Services is the dominant cloud platform, with a global reach and a strong range of Infrastructure-as-a-Service (IaaS) offerings. Whether your organisation has adopted a hybrid or multi-cloud approach, PCCW Global’s SDN-powered Console Connect platform can provide real time access to the AWS cloud from enterprise locations around the world, as well as interconnect your AWS instance with your existing data centres and other clouds.\n\nAs AWS Direct Connect Partner, our customers can access AWS Direct Connect. We have established interconnect monitoring and are authorized to provision capacities greater than 500Mbps.\n\nFor more info, please refer to https://www.consoleconnect.com/clouds", + "headline": "Instant Provision to AWS", + "background": null, + "avatarId": "5f8xxxxxxxxxxxxxxxxxxxxx", + "oldAvatarId": "5acxxxxxxxxxxxxxxxxxxxxx", + "verifiedIdentity": true, + "defaultPaymentType": "invoice", + "nnis": [] + } + ] + }, + "Azure": { + "summary": "Microsoft Azure", + "value": [ + { + "username": "azure", + "name": "Microsoft Azure", + "type": "COMPANY", + "avatar": null, + "overviewImage": null, + "categories": ["Cloud Service Provider"], + "isCloudProvider": true, + "cloudProviderDetails": { + "cloudType": "AZURE", + "partnerName": "azure", + "companyType": "DCP", + "asn": { + "value": 45678, + "range": [] + }, + "bgpAuthority": "MICROSOFT" + }, + "company": { + "addresses": [ + { + "geo": { + "type": "Point", + "coordinates": [] + }, + "registered": true, + "address": "123/F, Address street", + "city": "City", + "state": "WA", + "zip": "123456", + "country": "US", + "phone": null + } + ], + "businessType": "Cloud Service Provider", + "website": "https://azure.microsoft.com", + "parentIds": [], + "registeredName": "Microsoft", + "businessDevelopmentManagerTypePreference": "DATA" + }, + "portsActive": 18, + "portsPending": 0, + "portsDisabled": 0, + "signedCompanyRefId": 12, + "external": [ + { + "type": "INSIGHT", + "status": "UNSYNCED", + "id": "xxxxx" + }, + { + "type": "HUBSPOT", + "status": "SYNCED", + "id": "xxxxxx" + } + ], + "id": "xxxxxxxxxxxxxxxxxxxxxxxxx", + "deletedAt": null, + "createdAt": "2018-06-08T02:33:31.537Z", + "stats": { + "members": 2, + "followers": 20, + "following": 0, + "articles": 0, + "events": 0, + "posts": 0 + }, + "dataCenterFacility": {}, + "verified": true, + "tags": ["Cloud service providers", "promoted"], + "location": null, + "summary": "Microsoft Azure is a leading cloud provider and has a strong offering among organizations already invested in Microsoft software and services, such as those using Windows. Azure has a capable suite of service offerings and works hard to integrate with private data centres in hybrid cloud environments. As an ExpressRoute partner, Console Connect can provide real-time access to the Azure cloud from all enabled data centres around the world. For more information on how to connect to Azure visit: https://www.consoleconnect.com/clouds/microsoft-azure-direct-connect/", + "headline": "Instant Provision to Azure", + "background": null, + "avatarId": "5f8xxxxxxxxxxxxxxxxxxxxx", + "oldAvatarId": "5b2xxxxxxxxxxxxxxxxxxxxx", + "verifiedIdentity": true, + "defaultPaymentType": "invoice", + "nnis": [] + } + ] + }, + "Gamma": { + "summary": "Gamma Telecom Connections", + "value": [ + { + "username": "gamma", + "name": "Gamma Telecom Connections", + "type": "COMPANY", + "overviewImage": null, + "categories": ["Cloud Service Provider", "UCaaS"], + "isCloudProvider": true, + "cloudProviderDetails": { + "cloudType": "Gamma", + "companyType": "B2B", + "asn": { + "value": 45678, + "range": [] + }, + "bgpAuthority": "PCCWGLOBAL" + }, + "company": { + "addresses": [ + { + "registered": false, + "address": "123/F, Address street", + "city": "City", + "state": null, + "zip": null, + "country": "GB", + "email": null, + "phone": null, + "geo": { + "type": "Point", + "coordinates": [] + } + } + ], + "businessType": "Cloud Service Provider", + "registeredName": "Gamma Telecom", + "businessDevelopmentManagerTypePreference": "VOICE", + "partnerType": null, + "isIoTDemoCompany": false, + "parentIds": [] + }, + "portsActive": 2, + "portsPending": 0, + "portsDisabled": 0, + "signedCompanyRefId": 12, + "businessRegistrationNumber": "4xxxxxxx", + "external": [ + { + "id": "xxxxx", + "type": "HUBSPOT", + "status": "SYNCED" + } + ], + "id": "xxxxxxxxxxxxxxxxxxxxxxxxx", + "bundleCrossConnectChargeId": null, + "deletedAt": null, + "summary": "Gamma is a leading provider of Unified Communications as a Service (UCaaS) into the UK, Dutch, Spanish and German business markets, supplying communication solutions via our extensive network of trusted channel partners and also directly.\n\nThe combination of network investment, a digital-first approach and in-house development skills has enabled Gamma to develop a comprehensive portfolio of communications services with a significant amount of intellectual property, which has given us a heritage of disrupting the market with innovative and market-leading cloud-based services such as SIP Trunking and Hosted PBX in the UK.", + "headline": "Gamma Telecom", + "tags": ["promoted"], + "createdAt": "2023-11-09T13:33:07.502Z", + "stats": { + "members": 1, + "articles": 0, + "events": 0, + "followers": 2, + "following": 0, + "posts": 0 + }, + "dataCenterFacility": {}, + "nnis": [], + "verified": false, + "verifiedIdentity": true, + "avatarId": "65exxxxxxxxxxxxxxxxxxxxx", + "defaultPaymentType": "invoice" + } + ] + }, + "Google": { + "summary": "Google Cloud", + "value": [ + { + "username": "google_cloud", + "name": "Google Cloud", + "type": "COMPANY", + "avatar": null, + "overviewImage": null, + "categories": ["Cloud Service Provider"], + "isCloudProvider": true, + "cloudProviderDetails": { + "cloudType": "GOOGLE", + "partnerName": "google", + "companyType": "DCP", + "asn": { + "value": 45678 + }, + "bgpAuthority": "GOOGLE" + }, + "company": { + "addresses": [ + { + "geo": { + "coordinates": [], + "type": "Point" + }, + "phone": null, + "email": null, + "country": "US", + "zip": null, + "state": null, + "city": "City", + "address": "123/F, Address street", + "registered": false + } + ], + "businessType": "Cloud Service Provider", + "website": "https://cloud.google.com/compute/", + "parentIds": [], + "businessDevelopmentManagerTypePreference": "DATA" + }, + "portsActive": 62, + "portsPending": 0, + "portsDisabled": 0, + "signedCompanyRefId": 12, + "external": [ + { + "status": "UNSYNCED", + "id": null + }, + { + "type": "HUBSPOT", + "status": "SYNCED", + "id": "xxxxx" + } + ], + "id": "xxxxxxxxxxxxxxxxxxxxxxxxx", + "deletedAt": null, + "createdAt": "2018-10-09T06:18:22.821Z", + "stats": { + "members": 2, + "followers": 170, + "following": 0, + "articles": 0, + "events": 0, + "posts": 0 + }, + "dataCenterFacility": { + "brandId": null + }, + "verified": true, + "tags": ["promoted"], + "location": null, + "summary": "Google Cloud is one of the leading Platform-as-a-Service (PaaS) and Infrastructure-as-a-Service (IaaS) providers, with a strong presence in Machine Learning and AI. Through Google Cloud Partner Interconnect, Console Connect can provide real-time access to the Google Cloud Platform (GCP) from enterprise locations around the world, as well as interconnect your Google Cloud instance with your existing data centres by using Cloud Interconnect. For more information on how to connect to Google Cloud visit: https://www.consoleconnect.com/clouds/google-cloud/", + "headline": "Instant Provision to Google Cloud", + "background": null, + "avatarId": "5f8xxxxxxxxxxxxxxxxxxxxx", + "oldAvatarId": "5bbxxxxxxxxxxxxxxxxxxxxx", + "verifiedIdentity": true, + "defaultPaymentType": "invoice", + "nnis": [] + } + ] + }, + "Huawei": { + "summary": "Huawei Cloud", + "value": [ + { + "username": "huaweicloud", + "name": "Huawei Cloud", + "type": "COMPANY", + "avatar": null, + "overviewImage": null, + "categories": ["Cloud Service Provider"], + "isCloudProvider": true, + "cloudProviderDetails": { + "cloudType": "HUAWEI", + "partnerName": "huawei", + "companyType": "B2B", + "asn": { + "value": 45678, + "range": [] + }, + "bgpAuthority": "PCCWGLOBAL" + }, + "company": { + "addresses": [ + { + "geo": { + "coordinates": [], + "type": "Point" + }, + "phone": "+86-1234-567-890", + "email": null, + "country": "CN", + "zip": null, + "state": null, + "city": "City", + "address": "123/F, Address street", + "registered": true + } + ], + "businessType": "Cloud Service Provider", + "website": "https://www.huaweicloud.com/en-us/", + "parentIds": [], + "registeredName": "Huawei", + "businessDevelopmentManagerTypePreference": "DATA" + }, + "portsActive": 8, + "portsPending": 0, + "portsDisabled": 0, + "signedCompanyRefId": 12, + "external": [ + { + "type": "INSIGHT", + "status": "UNSYNCED", + "id": "xxxxx" + }, + { + "type": "HUBSPOT", + "status": "SYNCED", + "id": "xxxxx" + } + ], + "id": "xxxxxxxxxxxxxxxxxxxxxxxxx", + "deletedAt": null, + "createdAt": "2020-08-17T10:35:12.623Z", + "stats": { + "members": 13, + "followers": 25, + "following": 0, + "articles": 0, + "events": 0, + "posts": 0 + }, + "dataCenterFacility": { + "brandId": null + }, + "verified": false, + "tags": ["promoted"], + "location": null, + "summary": "Huawei Cloud provides reliable, secure, and cost-effective cloud services to empower applications, harness the power of data, and help organisations of all sizes grow in today’s intelligent world. As a Huawei Cloud Direct Connect partner, Console Connect can provide real time access to the Huawei Cloud from enterprise locations around the world, as well as interconnect your Huawei Cloud instance with your existing data centres and other clouds. For more information on how to connect to Huawei Cloud visit https://www.consoleconnect.com/clouds/connect-to-huawei-cloud/", + "headline": "Instant Provision to Huawei Cloud", + "background": null, + "avatarId": "601xxxxxxxxxxxxxxxxxxxxx", + "verifiedIdentity": true, + "nnis": [], + "defaultPaymentType": "invoice" + } + ] + }, + "Ibm": { + "summary": "IBM Cloud", + "value": [ + { + "username": "ibm", + "name": "IBM Cloud", + "type": "COMPANY", + "avatar": null, + "overviewImage": null, + "categories": ["Cloud Service Provider"], + "isCloudProvider": true, + "cloudProviderDetails": { + "cloudType": "IBM", + "partnerName": "ibm", + "companyType": "DCP", + "asn": { + "value": 45678, + "range": [] + }, + "bgpAuthority": "PCCWGLOBAL" + }, + "company": { + "addresses": [ + { + "geo": { + "type": "Point", + "coordinates": [] + }, + "registered": true, + "address": "123/F, Address street", + "city": "City", + "state": "NY", + "zip": "12345", + "country": "US", + "email": null, + "phone": null, + "primary": true + } + ], + "businessType": "Cloud Service Provider", + "website": "https://cloud.ibm.com/", + "parentIds": [], + "registeredName": "IBM", + "businessDevelopmentManagerTypePreference": "DATA" + }, + "portsActive": 26, + "portsPending": 0, + "portsDisabled": 0, + "signedCompanyRefId": 12, + "external": [ + { + "type": "HUBSPOT", + "status": "SYNCED", + "id": "xxxxx" + }, + { + "type": "INSIGHT", + "status": "UNSYNCED", + "id": "xxxxx" + } + ], + "id": "xxxxxxxxxxxxxxxxxxxxxxxxx", + "deletedAt": null, + "createdAt": "2020-03-20T03:01:52.248Z", + "stats": { + "members": 1, + "followers": 8, + "following": 0, + "articles": 0, + "events": 0, + "posts": 0 + }, + "dataCenterFacility": { + "brandId": null + }, + "verified": true, + "tags": ["Cloud service providers", "promoted"], + "location": null, + "summary": "IBM Cloud provides solutions that enable higher levels of compliance, security, and management, with proven architecture patterns and methods for rapid delivery for running mission-critical workloads. As an IBM Cloud Direct Link Service Provider, Console Connect can provide real-time access to the IBM Cloud from enterprise locations around the world, as well as interconnect your IBM Cloud instance with your existing data centres and other clouds. For more information on how to connect to IBM Cloud visit: https://www.consoleconnect.com/clouds/ibm-cloud/", + "headline": "Instant Provision to IBM Cloud", + "background": null, + "avatarId": "606xxxxxxxxxxxxxxxxxxxxx", + "oldAvatarId": "5ecxxxxxxxxxxxxxxxxxxxxx", + "verifiedIdentity": true, + "defaultPaymentType": "invoice", + "nnis": [] + } + ] + }, + "Oracle": { + "summary": "Oracle Cloud", + "value": [ + { + "username": "oracle", + "name": "Oracle Cloud", + "type": "COMPANY", + "avatar": null, + "overviewImage": null, + "categories": ["Cloud Service Provider"], + "isCloudProvider": true, + "cloudProviderDetails": { + "cloudType": "ORACLE", + "partnerName": "oracle", + "companyType": "DCP", + "asn": { + "value": 45678, + "range": [] + }, + "bgpAuthority": "PCCWGLOBAL" + }, + "company": { + "addresses": [ + { + "geo": { + "type": "Point", + "coordinates": [] + }, + "registered": true, + "address": "123/F, Address street", + "city": "City", + "state": "California", + "zip": null, + "country": "US", + "email": null, + "phone": null, + "primary": true + } + ], + "businessType": "Cloud Service Provider", + "website": "https://www.oracle.com/cloud/", + "parentIds": [], + "registeredName": "Oracle America, Inc", + "businessDevelopmentManagerTypePreference": "DATA", + "isIoTDemoCompany": false + }, + "portsActive": 28, + "portsPending": 0, + "portsDisabled": 0, + "signedCompanyRefId": 12, + "external": [ + { + "type": "INSIGHT", + "status": "UNSYNCED", + "id": "xxxxx" + }, + { + "type": "HUBSPOT", + "status": "SYNCED", + "id": "xxxxx" + }, + { + "id": "xxxxx", + "type": "COGID", + "status": "UNSYNCED" + } + ], + "id": "xxxxxxxxxxxxxxxxxxxxxxxxx", + "deletedAt": null, + "createdAt": "2020-08-15T08:08:07.680Z", + "stats": { + "members": 10, + "followers": 27, + "following": 0, + "articles": 0, + "events": 0, + "posts": 0 + }, + "dataCenterFacility": { + "brandId": null + }, + "verified": true, + "tags": ["promoted"], + "location": null, + "summary": "Oracle Cloud Infrastructure combines the elasticity and utility of public cloud with the granular control, security, and predictability of on-premises infrastructure to deliver high-performance and cost-effective infrastructure services. As an Oracle Cloud Fast Connect Global Partner, Console Connect can provide real-time access to Oracle Cloud infrastructure from any enabled data centre across the world. For more information on how to connect to Oracle Cloud visit: https://www.consoleconnect.com/clouds/connect-to-oracle-cloud/", + "headline": "Instant Provision to Oracle Cloud", + "background": null, + "avatarId": "5f8xxxxxxxxxxxxxxxxxxxxx", + "oldAvatarId": "5f3xxxxxxxxxxxxxxxxxxxxx", + "verifiedIdentity": true, + "defaultPaymentType": "invoice", + "nnis": [] + } + ] + }, + "Ovh": { + "summary": "OVHcloud", + "value": [ + { + "username": "ovhcloud", + "name": "OVHcloud", + "type": "COMPANY", + "avatar": null, + "overviewImage": "644xxxxxxxxxxxxxxxxxxxxx", + "categories": ["Cloud Service Provider"], + "isCloudProvider": true, + "cloudProviderDetails": { + "cloudType": "OVHCLOUD", + "companyType": "DCP", + "asn": { + "range": [65432, 65432] + }, + "bgpAuthority": "OVHCLOUD" + }, + "company": { + "website": "www.ovhcloud.com", + "businessType": "Cloud Service Provider", + "registeredName": null, + "addresses": [ + { + "registered": false, + "address": "123/F, Address street", + "city": "City", + "state": null, + "zip": null, + "country": "US", + "email": null, + "phone": null, + "geo": { + "type": "Point", + "coordinates": [] + } + } + ], + "parentIds": [], + "businessDevelopmentManagerTypePreference": "DATA", + "isIoTDemoCompany": false + }, + "portsActive": 7, + "portsPending": 0, + "portsDisabled": 0, + "signedCompanyRefId": 12, + "businessRegistrationNumber": "1", + "external": [ + { + "id": "xxxxx", + "type": "INSIGHT", + "status": "UNSYNCED" + }, + { + "id": "xxxxx", + "type": "HUBSPOT", + "status": "SYNCED" + } + ], + "id": "xxxxxxxxxxxxxxxxxxxxxxxxx", + "bundleCrossConnectChargeId": null, + "deletedAt": null, + "dataCenterFacility": { + "brandId": null + }, + "stats": { + "posts": 0, + "events": 0, + "articles": 0, + "following": 0, + "followers": 5, + "members": 1 + }, + "avatarId": "64axxxxxxxxxxxxxxxxxxxxx", + "background": null, + "headline": null, + "summary": "OVHcloud is a global player and the leading European cloud provider operating over 450,000 servers within 37 data centers across 4 continents to reach 1,6 million customers in over 140 countries. Spearheading a trusted cloud and pioneering a sustainable cloud with the best price-performance ratio, the Group has been leveraging for over 20 years an integrated model that guarantees total control of its value chain: from the design of its servers to the construction and management of its data centers, including the orchestration of its fiber-optic network. This unique approach enables OVHcloud to independently cover all the uses of its customers so they can seize the benefits of an environmentally conscious model with a frugal use of resources and a carbon footprint reaching the best ratios in the industry. OVHcloud now offers customers the latest-generation solutions combining performance, predictable pricing, and complete data sovereignty to support their unfettered growth.", + "location": null, + "tags": [], + "verified": false, + "verifiedIdentity": true, + "defaultPaymentType": "invoice", + "nnis": [], + "createdAt": "2023-01-27T05:46:29.660Z" + } + ] + }, + "Salesforce": { + "summary": "Salesforce.com", + "value": [ + { + "username": "salesforcecom", + "name": "Salesforce.com", + "type": "COMPANY", + "avatar": null, + "overviewImage": null, + "categories": ["Cloud Service Provider", "CRM"], + "isCloudProvider": true, + "cloudProviderDetails": { + "cloudType": "Salesforce", + "companyType": "B2B", + "asn": { + "value": 12345, + "range": [] + }, + "bgpAuthority": "PCCWGLOBAL" + }, + "company": { + "businessType": "Cloud Service Provider", + "website": "www.salesforce.com", + "addresses": [ + { + "geo": { + "coordinates": [], + "type": "Point" + }, + "phone": null, + "email": null, + "country": "US", + "zip": "12345", + "state": "CA", + "city": "City", + "address": "123/F, Address street", + "registered": true + } + ], + "parentIds": [], + "registeredName": "Salesforce.com, inc.", + "businessDevelopmentManagerTypePreference": "DATA" + }, + "portsActive": 6, + "portsPending": 0, + "portsDisabled": 0, + "signedCompanyRefId": 12, + "external": [ + { + "type": "INSIGHT", + "status": "UNSYNCED", + "id": "xxxxx" + }, + { + "type": "SALESRECORD", + "status": "UNSYNCED", + "id": "xxxxx" + }, + { + "type": "HUBSPOT", + "status": "SYNCED", + "id": "xxxxx" + } + ], + "id": "xxxxxxxxxxxxxxxxxxxxxxxxx", + "deletedAt": null, + "createdAt": "2018-05-23T13:09:05.855Z", + "stats": { + "members": 4, + "followers": 6, + "following": 1, + "articles": 0, + "events": 0, + "posts": 0 + }, + "dataCenterFacility": {}, + "verified": true, + "tags": [], + "location": null, + "summary": null, + "headline": null, + "background": null, + "avatarId": "631xxxxxxxxxxxxxxxxxxxxx", + "verifiedIdentity": true, + "defaultPaymentType": "invoice", + "nnis": [] + } + ] + }, + "Vultr": { + "summary": "Vultr", + "value": [ + { + "username": "vultrcloud", + "name": "Vultr", + "type": "COMPANY", + "avatar": null, + "overviewImage": null, + "categories": ["Cloud Service Provider"], + "isCloudProvider": true, + "cloudProviderDetails": { + "cloudType": "vultr", + "companyType": "B2B", + "asn": { + "value": 65432, + "range": [] + }, + "bgpAuthority": "PCCWGLOBAL" + }, + "company": { + "website": "https://www.vultr.com/company/about-us/", + "businessType": "Cloud Service Provider", + "registeredName": "Vultr Cloud", + "addresses": [ + { + "registered": true, + "address": "123/F, Address street", + "city": "City", + "state": "ST", + "zip": "12345", + "country": "US", + "email": null, + "phone": null, + "geo": { + "type": "Point", + "coordinates": [] + } + } + ], + "parentIds": [], + "businessDevelopmentManagerTypePreference": "DATA", + "isIoTDemoCompany": false + }, + "portsActive": 8, + "portsPending": 0, + "portsDisabled": 0, + "signedCompanyRefId": 12, + "businessRegistrationNumber": "123", + "external": [ + { + "id": "xxxxx", + "type": "HUBSPOT", + "status": "SYNCED" + } + ], + "id": "xxxxxxxxxxxxxxxxxxxxxxxxx", + "bundleCrossConnectChargeId": null, + "deletedAt": null, + "dataCenterFacility": { + "brandId": null + }, + "stats": { + "posts": 0, + "events": 0, + "articles": 0, + "following": 0, + "followers": 7, + "members": 3 + }, + "avatarId": "657xxxxxxxxxxxxxxxxxxxxx", + "background": null, + "headline": "High Performance Computing", + "summary": "Instantly deploy High-Performance Cloud Servers, Cloud GPUs, Bare Metal, and Cloud Storage worldwide. Vultr is an independent cloud computing platform on a mission to provide businesses and developers around the world with unrivaled global reach, unrivaled global performance, and simple, cost-effective pricing.", + "location": null, + "tags": [], + "verified": true, + "verifiedIdentity": true, + "defaultPaymentType": "invoice", + "nnis": [], + "createdAt": "2023-04-28T08:52:55.738Z" + } + ] + }, + "Wasabi": { + "summary": "Wasabi Cloud", + "value": [ + { + "username": "wasabicloud", + "name": "Wasabi Cloud", + "type": "COMPANY", + "avatar": null, + "overviewImage": "", + "categories": ["Cloud Service Provider"], + "isCloudProvider": true, + "cloudProviderDetails": { + "cloudType": "Wasabi", + "companyType": "B2B", + "asn": { + "value": 345678, + "range": [] + }, + "bgpAuthority": "PCCWGLOBAL" + }, + "company": { + "website": null, + "businessType": "Cloud Service Provider", + "partnerType": "Technology partner", + "registeredName": null, + "addresses": [ + { + "registered": false, + "address": "123/F, Address street", + "city": "City", + "state": null, + "zip": "12345", + "country": "US", + "email": null, + "phone": null, + "geo": { + "type": "Point", + "coordinates": [] + } + } + ], + "parentIds": [], + "businessDevelopmentManagerTypePreference": "DATA", + "isIoTDemoCompany": false + }, + "portsActive": 3, + "portsPending": 0, + "portsDisabled": 0, + "signedCompanyRefId": 12, + "businessRegistrationNumber": "123", + "external": [ + { + "id": "xxxxx", + "type": "HUBSPOT", + "status": "SYNCED" + } + ], + "id": "xxxxxxxxxxxxxxxxxxxxxxxxx", + "bundleCrossConnectChargeId": null, + "deletedAt": null, + "dataCenterFacility": { + "brandId": null + }, + "stats": { + "posts": 0, + "events": 0, + "articles": 0, + "following": 0, + "followers": 2, + "members": 0 + }, + "avatarId": "64bxxxxxxxxxxxxxxxxxxxxx", + "background": null, + "headline": "Wasabi: Affordable and predictably priced cloud object storage. No complex tiers. No fees for egress or API calls.", + "summary": "Wasabi Hot Cloud Storage is 100% compatible with AWS S3 and IAM APIs, making it an ideal addition to your multi-cloud strategy or as a drop-in replacement when designing any cloud-based storage solution. Wasabi partners with hundreds of the best applications and technologies in data management such as backup and recovery, archive, surveillance, data analytics, content delivery and more. Wasabi provides a highly durable, reliable and secure storage infrastructure. One price. Lightning fast speed. No hidden fees. Wasabi hot cloud storage.", + "location": null, + "tags": [], + "verified": false, + "verifiedIdentity": true, + "defaultPaymentType": "invoice", + "nnis": [], + "createdAt": "2023-07-20T03:45:18.967Z" + } + ] + } + }, + "schema": { + "properties": { + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "avatar": { + "type": "string" + }, + "overviewImage": { + "type": "string" + }, + "categories": { + "type": "array" + }, + "isCloudProvider": { + "type": "boolean" + }, + "cloudProviderDetails": { + "type": "object", + "description": "Extract necessary information from the cloud providers:\n\n * `type` (string): `cloudType` from `cloudProviderDetails`.\n\n * `asn` (number or array): `asn.value` or `asn.range` from `cloudProviderDetails`." + }, + "company": { + "type": "object" + }, + "portsActive": { + "type": "number" + }, + "portsPending": { + "type": "number" + }, + "portsDisabled": { + "type": "number" + }, + "signedCompanyRefId": { + "type": "number" + }, + "external": { + "type": "array" + }, + "id": { + "type": "string", + "description": "This will be the `providerId` parameter that you will be using in getting the list of valid ports for this Cloud Provider." + }, + "deletedAt": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "stats": { + "type": "object" + }, + "dataCenterFacility": { + "type": "object" + }, + "verified": { + "type": "boolean" + }, + "tags": { + "type": "array" + }, + "location": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "headline": { + "type": "string" + }, + "background": { + "type": "string" + }, + "avatarId": { + "type": "string" + }, + "oldAvatarId": { + "type": "number" + }, + "verifiedIdentity": { + "type": "boolean" + }, + "defaultPaymentType": { + "type": "string" + }, + "nnis": { + "type": "array" + } + }, + "title": "Company Valid Providers response schema", + "type": "object" + } + } + }, + "description": "OK", + "headers": {} + }, + "401": { + "content": { + "application/json": { + "examples": { + "No-Token-Provided": { + "summary": "No Token Provided", + "value": { + "message": "The user is not logged in", + "status": 401, + "statusCode": 401 + } + }, + "User-Logged-Out": { + "summary": "User logged out", + "value": { + "message": "The session token been deleted", + "status": 401, + "statusCode": 401 + } + } + } + } + }, + "description": "Unauthorized", + "headers": {} + } + }, + "operationId": "find-valid-cloud-providers" + } + }, + "/v2/companies/cloud-providers/{providerId}/ports": { + "get": { + "summary": "Find Valid Ports in a Cloud Provider", + "tags": ["CloudRouter"], + "description": "Get the list of valid ports for a specific cloud provider.\n\nNote: If there are no `connectionSpeeds` listed under `partner`, this field will not be required on the create site payload.\n", + "parameters": [ + { + "description": "The ID of the Cloud Provider.", + "example": "5aa7209defe3bc00124d075f", + "name": "providerId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "summary": "Full response data", + "value": [ + { + "id": "64bxxxxxxxxxxxxxxxxxxxxx", + "name": "Bangkok (ap-southeast-1) TCC", + "dcfId": "5dexxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + } + ] + } + }, + { + "id": "629xxxxxxxxxxxxxxxxxxxxx", + "name": "Canada (ca-central-1) - Cologix MTL7", + "dcfId": "61fxxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + } + ] + } + }, + { + "id": "627xxxxxxxxxxxxxxxxxxxxx", + "name": "Capetown (eu-west-1) - Terraco Capetown", + "dcfId": "5b3xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + } + ] + } + }, + { + "id": "62cxxxxxxxxxxxxxxxxxxxxx", + "name": "Dubai (eu-west-1) Datamena IMPZ", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + } + ] + } + }, + { + "id": "5aaxxxxxxxxxxxxxxxxxxxxx", + "name": "Frankfurt (eu-central-1) - Equinix FR5", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "value": 50, + "type": "AUTOMATIC" + }, + { + "value": 100, + "type": "AUTOMATIC" + }, + { + "value": 200, + "type": "AUTOMATIC" + }, + { + "value": 300, + "type": "AUTOMATIC" + }, + { + "value": 400, + "type": "AUTOMATIC" + }, + { + "value": 500, + "type": "AUTOMATIC" + }, + { + "value": 1000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "60fxxxxxxxxxxxxxxxxxxxxx", + "name": "Frankfurt (eu-central-1) - InterXion FRA6", + "dcfId": "5d4xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + }, + { + "type": "AUTOMATIC", + "value": 2000 + } + ] + } + }, + { + "id": "651xxxxxxxxxxxxxxxxxxxxx", + "name": "Hong Kong (ap-east-1) - Equinix HK1 (2)", + "dcfId": "5efxxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + }, + { + "value": 2000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "5cexxxxxxxxxxxxxxxxxxxxx", + "name": "Hong Kong (ap-southeast-1) - iAdvantage MEGA-i", + "dcfId": "5a8xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "value": 50, + "type": "AUTOMATIC" + }, + { + "value": 100, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "62cxxxxxxxxxxxxxxxxxxxxx", + "name": "Hong Kong (ap-southeast-1) - iAdvantage MEGA-i (2)", + "dcfId": "5a8xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + }, + { + "value": 2000, + "type": "AUTOMATIC" + }, + { + "value": 5000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "5aaxxxxxxxxxxxxxxxxxxxxx", + "name": "Ireland (eu-west-1) - Equinix LD8", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "value": 50, + "type": "AUTOMATIC" + }, + { + "value": 100, + "type": "AUTOMATIC" + }, + { + "value": 200, + "type": "AUTOMATIC" + }, + { + "value": 300, + "type": "AUTOMATIC" + }, + { + "value": 400, + "type": "AUTOMATIC" + }, + { + "value": 500, + "type": "AUTOMATIC" + }, + { + "value": 1000, + "type": "AUTOMATIC" + }, + { + "value": 2000, + "type": "AUTOMATIC" + }, + { + "value": 5000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "5d6xxxxxxxxxxxxxxxxxxxxx", + "name": "Johannesburg (eu-west-1) - Teraco", + "dcfId": "5bdxxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "value": 50, + "type": "AUTOMATIC" + }, + { + "value": 100, + "type": "AUTOMATIC" + }, + { + "value": 200, + "type": "AUTOMATIC" + }, + { + "value": 300, + "type": "AUTOMATIC" + }, + { + "value": 400, + "type": "AUTOMATIC" + }, + { + "value": 500, + "type": "AUTOMATIC" + }, + { + "value": 1000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "61exxxxxxxxxxxxxxxxxxxxx", + "name": "Kuala Lumpuer (ap-southeast-1) - AIMS Kuala Lumpur", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + } + ] + } + }, + { + "id": "60fxxxxxxxxxxxxxxxxxxxxx", + "name": "Las Vegas (us-west-2) - Switch Las Vegas", + "dcfId": "5f7xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + }, + { + "type": "MANUAL", + "value": 2000 + }, + { + "type": "MANUAL", + "value": 5000 + }, + { + "type": "MANUAL", + "value": 10000 + } + ] + } + }, + { + "id": "5b4xxxxxxxxxxxxxxxxxxxxx", + "name": "London (eu-west-2) - Telehouse East", + "dcfId": "5aexxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "value": 50, + "type": "AUTOMATIC" + }, + { + "value": 100, + "type": "AUTOMATIC" + }, + { + "value": 200, + "type": "AUTOMATIC" + }, + { + "value": 300, + "type": "AUTOMATIC" + }, + { + "value": 400, + "type": "AUTOMATIC" + }, + { + "value": 500, + "type": "AUTOMATIC" + }, + { + "value": 1000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "60cxxxxxxxxxxxxxxxxxxxxx", + "name": "Los Angeles (us-west-1) - Equinix IBX LA1", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + }, + { + "type": "AUTOMATIC", + "value": 2000 + }, + { + "type": "AUTOMATIC", + "value": 5000 + }, + { + "type": "MANUAL", + "value": 10000 + } + ] + } + }, + { + "id": "64bxxxxxxxxxxxxxxxxxxxxx", + "name": "Madrid (eu-central-1) Interxion", + "dcfId": "5f0xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + } + ] + } + }, + { + "id": "65axxxxxxxxxxxxxxxxxxxxx", + "name": "Mexico(us-east-1) - KIO Networks QRO 1", + "dcfId": "640xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + }, + { + "value": 2000, + "type": "AUTOMATIC" + }, + { + "value": 5000, + "type": "AUTOMATIC" + }, + { + "value": 10000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "5dexxxxxxxxxxxxxxxxxxxxx", + "name": "Miami (us-east-1) - Equinix MI1", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "MANUAL", + "value": 1000 + } + ] + } + }, + { + "id": "5aaxxxxxxxxxxxxxxxxxxxxx", + "name": "N. California (us-west-1) - Equinix SV1", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "value": 50, + "type": "AUTOMATIC" + }, + { + "value": 100, + "type": "AUTOMATIC" + }, + { + "value": 200, + "type": "AUTOMATIC" + }, + { + "value": 300, + "type": "AUTOMATIC" + }, + { + "value": 400, + "type": "AUTOMATIC" + }, + { + "value": 500, + "type": "AUTOMATIC" + }, + { + "value": 1000, + "type": "AUTOMATIC" + }, + { + "value": 2000, + "type": "AUTOMATIC" + }, + { + "value": 5000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "62exxxxxxxxxxxxxxxxxxxxx", + "name": "N. California (us-west-1) - Equinix SV1 (2)", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + }, + { + "value": 2000, + "type": "AUTOMATIC" + }, + { + "value": 5000, + "type": "AUTOMATIC" + }, + { + "value": 10000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "5abxxxxxxxxxxxxxxxxxxxxx", + "name": "N. Virginia (us-east-1) - Equinix DC1", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "value": 50, + "type": "AUTOMATIC" + }, + { + "value": 100, + "type": "AUTOMATIC" + }, + { + "value": 200, + "type": "AUTOMATIC" + }, + { + "value": 300, + "type": "AUTOMATIC" + }, + { + "value": 400, + "type": "AUTOMATIC" + }, + { + "value": 500, + "type": "AUTOMATIC" + }, + { + "value": 1000, + "type": "AUTOMATIC" + }, + { + "value": 2000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "622xxxxxxxxxxxxxxxxxxxxx", + "name": "N.California (us-west-1) - Coresite LA1", + "dcfId": "5a8xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + }, + { + "value": 2000, + "type": "AUTOMATIC" + }, + { + "value": 5000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "622xxxxxxxxxxxxxxxxxxxxx", + "name": "N.Virginia (us-east-1) - Equinix DA1", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + }, + { + "value": 5000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "5c3xxxxxxxxxxxxxxxxxxxxx", + "name": "Ohio (us-east-2) - Equinix CH1", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "value": 50, + "type": "AUTOMATIC" + }, + { + "value": 100, + "type": "AUTOMATIC" + }, + { + "value": 200, + "type": "AUTOMATIC" + }, + { + "value": 300, + "type": "AUTOMATIC" + }, + { + "value": 400, + "type": "AUTOMATIC" + }, + { + "value": 500, + "type": "AUTOMATIC" + }, + { + "value": 1000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "5b2xxxxxxxxxxxxxxxxxxxxx", + "name": "Oregon (us-west-2) - Equinix SE2", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "value": 50, + "type": "AUTOMATIC" + }, + { + "value": 100, + "type": "AUTOMATIC" + }, + { + "value": 200, + "type": "AUTOMATIC" + }, + { + "value": 300, + "type": "AUTOMATIC" + }, + { + "value": 400, + "type": "AUTOMATIC" + }, + { + "value": 500, + "type": "AUTOMATIC" + }, + { + "value": 1000, + "type": "AUTOMATIC" + }, + { + "value": 2000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "5fbxxxxxxxxxxxxxxxxxxxxx", + "name": "Osaka (ap-northeast-1) - Equinix OS1", + "dcfId": "5b1xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "value": 100, + "type": "AUTOMATIC" + }, + { + "value": 200, + "type": "AUTOMATIC" + }, + { + "value": 300, + "type": "AUTOMATIC" + }, + { + "value": 400, + "type": "AUTOMATIC" + }, + { + "value": 500, + "type": "AUTOMATIC" + }, + { + "value": 1000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "632xxxxxxxxxxxxxxxxxxxxx", + "name": "Paris (eu-west-3) - InterXion PAR2", + "dcfId": "5c1xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + }, + { + "type": "AUTOMATIC", + "value": 2000 + }, + { + "type": "AUTOMATIC", + "value": 5000 + } + ] + } + }, + { + "id": "5b4xxxxxxxxxxxxxxxxxxxxx", + "name": "Paris (eu-west-3) - Telehouse 2", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "value": 50, + "type": "AUTOMATIC" + }, + { + "value": 100, + "type": "AUTOMATIC" + }, + { + "value": 200, + "type": "AUTOMATIC" + }, + { + "value": 300, + "type": "AUTOMATIC" + }, + { + "value": 400, + "type": "AUTOMATIC" + }, + { + "value": 500, + "type": "AUTOMATIC" + }, + { + "value": 1000, + "type": "AUTOMATIC" + }, + { + "value": 2000, + "type": "AUTOMATIC" + }, + { + "value": 5000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "626xxxxxxxxxxxxxxxxxxxxx", + "name": "Reston (us-east-1) - Coresite VA1", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + } + ] + } + }, + { + "id": "5d5xxxxxxxxxxxxxxxxxxxxx", + "name": "Seoul (ap-northeast-2) - KINX Gasan", + "dcfId": "5cdxxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "value": 50, + "type": "AUTOMATIC" + }, + { + "value": 100, + "type": "AUTOMATIC" + }, + { + "value": 200, + "type": "AUTOMATIC" + }, + { + "value": 300, + "type": "AUTOMATIC" + }, + { + "value": 400, + "type": "AUTOMATIC" + }, + { + "value": 500, + "type": "AUTOMATIC" + }, + { + "value": 1000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "635xxxxxxxxxxxxxxxxxxxxx", + "name": "Singapore (ap-southeast-1) - Equinix SG2 (2)", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + }, + { + "value": 2000, + "type": "AUTOMATIC" + }, + { + "value": 5000, + "type": "AUTOMATIC" + }, + { + "value": 10000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "5caxxxxxxxxxxxxxxxxxxxxx", + "name": "Singapore (ap-southeast-1) - Global Switch", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "value": 50, + "type": "AUTOMATIC" + }, + { + "value": 100, + "type": "AUTOMATIC" + }, + { + "value": 200, + "type": "AUTOMATIC" + }, + { + "value": 300, + "type": "AUTOMATIC" + }, + { + "value": 400, + "type": "AUTOMATIC" + }, + { + "value": 500, + "type": "AUTOMATIC" + }, + { + "value": 1000, + "type": "AUTOMATIC" + }, + { + "value": 5000, + "type": "AUTOMATIC" + }, + { + "value": 2000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "625xxxxxxxxxxxxxxxxxxxxx", + "name": "Singapore (ap-southeast-1) - Global Switch (2)", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + }, + { + "type": "AUTOMATIC", + "value": 2000 + }, + { + "type": "AUTOMATIC", + "value": 5000 + }, + { + "type": "AUTOMATIC", + "value": 10000 + } + ] + } + }, + { + "id": "63exxxxxxxxxxxxxxxxxxxxx", + "name": "Slough (eu-west-2) Equinix LD5", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + } + ] + } + }, + { + "id": "5aaxxxxxxxxxxxxxxxxxxxxx", + "name": "Sydney (ap-southeast-2) - Equinix SY1", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "value": 50, + "type": "AUTOMATIC" + }, + { + "value": 100, + "type": "AUTOMATIC" + }, + { + "value": 200, + "type": "AUTOMATIC" + }, + { + "value": 300, + "type": "AUTOMATIC" + }, + { + "value": 400, + "type": "AUTOMATIC" + }, + { + "value": 500, + "type": "AUTOMATIC" + }, + { + "value": 1000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "623xxxxxxxxxxxxxxxxxxxxx", + "name": "Sydney (ap-southeast-2) - Global Switch SY6", + "dcfId": "5aexxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + } + ] + } + }, + { + "id": "616xxxxxxxxxxxxxxxxxxxxx", + "name": "Taipei (ap-northeast-1) - Chief Telecom LY", + "dcfId": "5b3xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + } + ] + } + }, + { + "id": "626xxxxxxxxxxxxxxxxxxxxx", + "name": "Tokyo (ap-northeast-1) - AT Tokyo", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + } + ] + } + }, + { + "id": "5aaxxxxxxxxxxxxxxxxxxxxx", + "name": "Tokyo (ap-northeast-1) - Arteria Networks", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "value": 50, + "type": "AUTOMATIC" + }, + { + "value": 100, + "type": "AUTOMATIC" + }, + { + "value": 200, + "type": "AUTOMATIC" + }, + { + "value": 300, + "type": "AUTOMATIC" + }, + { + "value": 400, + "type": "AUTOMATIC" + }, + { + "value": 500, + "type": "AUTOMATIC" + }, + { + "value": 1000, + "type": "AUTOMATIC" + } + ] + } + }, + { + "id": "62bxxxxxxxxxxxxxxxxxxxxx", + "name": "Zurich (eu-central-1) - Equinix ZH4", + "dcfId": "5a9xxxxxxxxxxxxxxxxxxxxx", + "partner": { + "connectionSpeeds": [ + { + "type": "AUTOMATIC", + "value": 50 + }, + { + "type": "AUTOMATIC", + "value": 100 + }, + { + "type": "AUTOMATIC", + "value": 200 + }, + { + "type": "AUTOMATIC", + "value": 300 + }, + { + "type": "AUTOMATIC", + "value": 400 + }, + { + "type": "AUTOMATIC", + "value": 500 + }, + { + "type": "AUTOMATIC", + "value": 1000 + } + ] + } + } + ] + } + }, + "schema": { + "properties": { + "id": { + "type": "string", + "description": "This will be your `portId`." + }, + "name": { + "type": "string" + }, + "dcfId": { + "type": "string" + }, + "partner": { + "type": "object" + } + }, + "title": "Cloud Provider Valid Ports response schema", + "type": "object" + } + } + }, + "description": "OK", + "headers": {} + }, + "401": { + "content": { + "application/json": { + "examples": { + "No-Token-Provided": { + "summary": "No Token Provided", + "value": { + "message": "The user is not logged in", + "status": 401, + "statusCode": 401 + } + }, + "User-Logged-Out": { + "summary": "User logged out", + "value": { + "message": "The session token been deleted", + "status": 401, + "statusCode": 401 + } + } + } + } + }, + "description": "Unauthorized", + "headers": {} + } + }, + "operationId": "find-valid-ports" + } + }, + "/app-user/{companyId}/l3vpns/{l3vpnId}": { + "delete": { + "parameters": [ + { + "name": "companyId", + "in": "path", + "description": "The ID of the company.", + "required": true, + "example": "5e4cb418ab1dbe8c8476163b", + "schema": { + "type": "string" + } + }, + { + "name": "l3vpnId", + "in": "path", + "description": "The ID of the CloudRouter", + "required": true, + "example": "61668e06e8dd60b034f3cd61", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "uuid": "4c5f6bcc-3d8b-4be7-a4a7-e44c711007d7", + "name": "My CloudRouter", + "status": "DELETING", + "id": "63e47974c3af0500151b59ef", + "companyId": "5d4d056242fbd3000ab4c01d", + "deletedAt": null, + "createdAt": "2022-01-09T04:41:24.455Z", + "updatedAt": "2023-02-15T03:34:16.916Z", + "paymentMethod": "invoice", + "duration": { + "quantity": 1, + "unit": "m" + }, + "bandwidth": "500MB" + } + } + }, + "description": "OK", + "headers": {} + }, + "400": { + "description": "The CloudRouter having active sites cannot be deleted / CloudRouter's contract is still active", + "headers": {} + }, + "404": { + "description": "The CloudRouter has not found", + "headers": {} + } + }, + "summary": "Deprovision a CloudRouter", + "operationId": "Deprovision-a-CloudRouter", + "description": "Prerequisites:\n\n* The authenticated user account has CloudRouter Destroy permissions.\n\n* The CloudRouter does not have any attached sites which have not been deleted.\n\n* The CloudRouter is in the status: CREATED.\n\n* The contract end date must be in the past", + "tags": ["CloudRouter"] + } + }, + "/app-user/{companyId}/l3vpn/{vpnId}/site": { + "post": { + "parameters": [ + { + "description": "The ID of the company. You can check your companyId in your account on ***[Console Connect](https://www.consoleconnect.com/)*** website or you can query in ***[Auth](#tag/Auth/operation/GetLoggedInUser)*** API\n", + "in": "path", + "example": "5e4cb418ab1dbe8c8476163b", + "name": "companyId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of your CloudRouter. You can find this from the response of the create CloudRouter endpoint, or by querying CloudRouters (see ***[Query existing CloudRouters](#tag/CloudRouter/operation/Query-existing-CloudRouters)***)\n", + "in": "path", + "example": "5e4cb418ab1dbe8c8476163b", + "name": "vpnId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/ProvisionCloudRouterMyPortSite" + }, + { + "$ref": "#/components/schemas/ProvisionCloudRouterGoogleSite" + }, + { + "$ref": "#/components/schemas/ProvisionCloudRouterAzureSite" + }, + { + "$ref": "#/components/schemas/ProvisionCloudRouterCloudSite" + }, + { + "$ref": "#/components/schemas/ProvisionCloudRouterOvhSite" + }, + { + "$ref": "#/components/schemas/ProvisionCloudRouterOracleSite" + } + ] + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "service": { + "id": "6259d021-664e-4bb0-942a-b1cd68a7a75b", + "companyId": "5ea242303962644b52fc4346", + "l3vpnId": "60cfcce5cca2885ebbdb7294", + "name": "my test site", + "type": "GOOGLE", + "peerData": { + "asn": 16550, + "pairingKey": "2dfcdee7-b6f9-41d0-b98f-639151097693/us-west1/1", + "speed": 500 + }, + "rateLimit": { + "unit": "Mbps", + "value": 42 + }, + "mtu": null, + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "status": "CREATING", + "deleted_at": null, + "created_at": "2021-06-20T23:19:01.364Z", + "updated_at": "2021-06-20T23:19:01.364Z", + "peers": [] + } + } + } + }, + "description": "OK", + "headers": {} + }, + "400": { + "content": { + "application/json": { + "examples": { + "SIM-Pool-Site-Only-Invalid-Access-Circuit": { + "summary": "SIM Pool Site Only: Invalid Access Circuit", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "Access circuit must contain either a portId or simPoolId" + } + } + }, + "SIM-Pool-Site-Only-Peer-not-required": { + "summary": "SIM Pool Site Only: Peer not required", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "SIM pool sites do not require peer object" + } + } + }, + "SIM-Pool-Site-Only-MTU-not-required": { + "summary": "SIM Pool Site Only: MTU not required", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "SIM pool sites do not need an MTU" + } + } + }, + "SIM-Pool-Site-Only-Rate-limit-can-not-be-set-for-SIM-pool-sites": { + "summary": "SIM Pool Site Only: Rate limit can not be set for SIM pool sites", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "Rate limit can not be set for SIM pool sites." + } + } + }, + "SIM-Pool-Site-Only-Class-of-Service-can-not-be-set-for-SIM-pool-sites": { + "summary": "SIM Pool Site Only: Class of Service can not be set for SIM pool sites", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "Class of Service can not be set for SIM pool sites." + } + } + } + } + } + }, + "description": "Validation errors", + "headers": {} + } + }, + "tags": ["CloudRouter"], + "operationId": "Provision-a-new-L3VPN-Site", + "summary": "Provision a new Site on an existing VPN (CloudRouter)", + "description": "### Provision a new VPN site\n\nPrerequisites:\n* Your company has been verified on the Console Connect platform and you have signed the Specific Terms for API use. Contact ***[Support](mailto:support@consoleconnect.com)*** if you are unsure whether this has been completed for your company.\n* Use API key to authenticate Once you apply for an API key the Support team will send you the key that you will require. (See ***[Auth](#tag/Auth/operation/GetLoggedInUser)***)\n* The authenticated user account has L3VPN Update and L3VPN Site Create permissions.\n* Your company already has an L3VPN (CloudRouter) on the Console Connect platform. You can check this in the Web Application or use the Query existing CloudRouters APi endpoint (See ***[Query existing CloudRouters](#tag/CloudRouter/operation/Query-existing-CloudRouters)***)\n* Site Ports:\n * The port (identified with `portId`) must have enough remaining capacity.\n * The port needs to be Active.\n* Tier Rate Limit for DCP providers:\n * Must be one of the speed tiers marked as available on the DCP port.\n * Must be greater than or equal to the requested rateLimit.\n* My Port Site:\n * My port sites (`peer.type \"SELF\"`) are sites created on one of your active Console Connect Ports.\n\n\n#### Site Ports\n\nThe port (identified with portId) must have enough remaining capacity.\n\n\n#### Tier Rate Limit for DCP providers\n\n* must be one of the speed tiers marked as available on the DCP port.\n* must be greater than or equal to the requested rateLimit\n\n\n#### My Port Site\n\nMy port sites (**peer.type** \"SELF\") are sites created on one of your active Console Connect Ports." + } + }, + "/app-user/{companyId}/l3vpn/{l3vpnId}/sites": { + "get": { + "parameters": [ + { + "description": "The ID of the company.", + "in": "path", + "example": "5d4d056242fbd3000ab4c01d", + "name": "companyId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of an ACTIVE CloudRouter.", + "in": "path", + "example": "63e48134c3af0500151b59f3", + "name": "l3vpnId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": [ + { + "id": "e9c046ea-b71d-44e3-8fe3-2ac7a82f15ff", + "companyId": "5d4d056242fbd3000ab4c01d", + "l3vpnId": "63e48134c3af0500151b59f3", + "name": "CloudRouter Site Test", + "type": "COMPANY", + "portId": "62ba77953de2590016b71a47", + "slVlanId": 104, + "rateLimit": { + "rate": 50, + "unit": "Mbps" + }, + "mtu": null, + "classOfService": [ + { + "name": "BRONZE", + "value": 50 + }, + { + "name": "SILVER", + "value": 30 + }, + { + "name": "GOLD", + "value": 20 + } + ], + "redundancySiteType": "primary", + "redundancyLinkedSiteId": null, + "status": "ACTIVE", + "simPoolId": null, + "company_id": "5d4d056242fbd3000ab4c01d", + "l3vpn_id": "63e48134c3af0500151b59f3", + "sim_pool_id": null, + "deleted_at": null, + "created_at": "2023-02-14T03:38:04.010Z", + "updated_at": "2023-02-14T03:38:43.233Z", + "port_id": "62ba77953de2590816b71a47", + "peers": [ + { + "id": "cd5c7320-90c1-4472-be18-90def17e7e9a", + "companyId": "5d4d056242fbd3000ab4c01d", + "l3vpnSiteId": "e9c046ea-b71d-44e3-8fe3-2ac7a82f15ff", + "slPeerUuid": "24c959a8-6324-4a49-81b6-471f48cef3bd", + "type": "SELF", + "partner": null, + "status": "ACTIVE", + "bgpKey": "gLYoRfoDnmwaAtTP7Cqfizlm", + "asn": 64512, + "externalIp": "10.124.208.26/30", + "internalIp": "10.124.208.25/30", + "subnet": "10.124.208.24/30", + "defaultOriginate": false, + "company_id": "5d4d056242fbd3000ab4c01d", + "l3vpn_site_id": "e9c046ea-b71d-44e3-8fe3-2ac7a82f15ff", + "deleted_at": null, + "created_at": "2023-02-14T03:38:37.440Z", + "updated_at": "2023-02-14T03:38:42.969Z" + } + ], + "l3vpn": { + "name": "CloudRouter Test", + "status": "CREATED", + "id": "63e48134c3af0500151b59f3", + "paymentMethod": "invoice", + "duration": { + "quantity": 1, + "unit": "m" + }, + "bandwidth": "500MB", + "companyId": "5d4d056242fbd3000ab4c01d", + "deletedAt": null, + "createdAt": "2023-02-09T05:14:28.759Z", + "updatedAt": "2023-02-09T05:23:27.040Z", + "calculatedCapacity": { + "total": 500, + "used": 50, + "remaining": 450 + } + }, + "providerInfo": { + "city": "Hong Kong", + "country": "CN", + "countryDisplayName": "China", + "metroName": "Hong Kong", + "dcfName": "iAdvantage MEGA-i", + "companyName": "QE1", + "companyUsername": "consoletestcompany100b", + "portName": "QE1 PAYG CC", + "portId": "62ba77953de2590016b81a47", + "dcfId": "5a8ba9118195000012e0f141", + "metroId": "77d9f1fbbcaa90663cddb6d1", + "companyId": "5d4d056242fbd3000ab4c01d", + "portPartner": { + "type": "NONE", + "connectionSpeeds": [] + } + } + } + ] + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["CloudRouter"], + "description": "", + "operationId": "Get-list-of-CloudRouter-Sites", + "summary": "Get list of CloudRouter sites" + } + }, + "/app-user/{companyId}/l3vpns/{l3vpnId}/sites/{siteId}": { + "delete": { + "parameters": [ + { + "name": "companyId", + "in": "path", + "description": "The ID of the company.", + "required": true, + "example": "5e4cb418ab1dbe8c8476163b", + "schema": { + "type": "string" + } + }, + { + "name": "l3vpnId", + "in": "path", + "description": "The ID of the CloudRouter", + "required": true, + "example": "61668e06e8dd60b034f3cd61", + "schema": { + "type": "string" + } + }, + { + "name": "siteId", + "in": "path", + "description": "The ID of site", + "required": true, + "example": "61668e06e8dd60b034f3cd61", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "CloudRouter site record with specified id was not found" + } + }, + "summary": "Deprovision a Site of an existing CloudRouter", + "operationId": "Deprovision-a-Site-of-an-existing-CloudRouter", + "description": "Prerequisites:\n\n* The authenticated user account has permissions to delete the site of an existing CloudRouter.", + "tags": ["CloudRouter"] + } + }, + "/app-user/{companyId}/check-ip-availability": { + "get": { + "parameters": [ + { + "description": "The ID of the company requesting the IP availability check.", + "example": "5e4cb418ab1dbe8c8476163b", + "name": "companyId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "description": "IP version, either IPv4 or IPv6.", + "example": "ipv4", + "name": "type", + "required": true, + "in": "query", + "schema": { + "type": "string", + "enum": ["ipv4", "ipv6"] + } + }, + { + "description": "The IP pool to check; either customer or linknet. 'customer' for checking customer routable IP addresses, or 'linket' for link IP addresses.", + "example": "customer", + "name": "pool", + "required": true, + "in": "query", + "schema": { + "type": "string", + "enum": ["customer", "linknet"] + } + }, + { + "description": "Specify a subnet mask to indicate the size of IP block you are looking for.", + "example": 29, + "name": "mask", + "required": true, + "in": "query", + "schema": { + "type": "integer", + "enum": [26, 27, 28, 29, 30] + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "available": { + "value": true + }, + "unavailable": { + "value": false + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Internet On-Demand (IO-D)"], + "description": "### Prerequisites\n\n* Your company has been verified on the Console Connect platform", + "operationId": "check-ip-availability", + "summary": "Check IP Availability" + } + }, + "/app-user/{companyId}/ports/{portId}/info": { + "get": { + "parameters": [ + { + "description": "The ID of the company requesting the capabilities check.", + "example": "5e4cb418ab1dbe8c8476163b", + "name": "companyId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the port to request the capabilities of.", + "example": "6ea4b418ab1dbe8c8476163b", + "name": "portId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Port_CapabilitiesModel" + }, + "examples": { + "IO_DAvailable": { + "value": { + "capabilities": { + "giaStandardV1": true, + "l2TypeA": false, + "l3vpnTypeA": true, + "qinq": true + } + } + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Ports"], + "description": "Check the capabilities of a Port.\n### Prerequisites:\n* Your company has been verified on the Console Connect platform.\n* You have a port.", + "operationId": "check-port-capability", + "summary": "Check Port capabilities" + } + }, + "/api/private-asn/suggestion": { + "get": { + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "asn": { + "type": "number", + "description": "Suggested allocatable private ASN" + } + } + }, + "example": { + "asn": 4200000055 + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Internet On-Demand (IO-D)"], + "description": "Get an allocatable Private ASN suggestion.", + "operationId": "get-private-asn-suggestion", + "summary": "Get Private ASN Suggestion" + } + }, + "/api/private-asn/range": { + "get": { + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "start": { + "type": "number", + "description": "Minimum ASN range" + }, + "end": { + "type": "number", + "description": "Maximum ASN range" + } + } + }, + "example": { + "start": 4200000000, + "end": 4294967294 + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Internet On-Demand (IO-D)"], + "description": "Get the minimum and maximum ASN range", + "operationId": "get-private-asn-range", + "summary": "Get Private ASN Range" + } + }, + "/api/private-asn/validate": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "asn": 3200000055 + }, + "properties": { + "asn": { + "description": "The private asn to be validated.", + "type": "number" + } + }, + "required": ["asn"] + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/ValidAsn" + }, + { + "$ref": "#/components/schemas/InvalidAsn" + } + ] + }, + "examples": { + "invalid": { + "value": { + "asn": 3200000055, + "valid": false, + "reason": "ASN is out of range" + } + }, + "valid": { + "value": { + "asn": 2200000055, + "valid": true + } + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Internet On-Demand (IO-D)"], + "description": "", + "operationId": "validate-private-asn", + "summary": "Validate a Private ASN" + } + }, + "/app-user/{companyId}/asns": { + "get": { + "parameters": [ + { + "description": "The company ID to perform this action for.", + "in": "path", + "example": "xxxxxxxxxxxxxxxxxxxxxxxx", + "name": "companyId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Used to specify criteria for filtering the data in the query string of the URL", + "in": "query", + "example": "{\"where\":{\"status\":\"VERIFIED\",\"private\":false}}", + "name": "filter", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": [ + { + "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "companyId": "xxxxxxxxxxxxxxxxxxxxxxxx", + "asn": "1234", + "asSet": "AS-KEYCOM", + "private": false, + "skipPrefixSync": false, + "status": "VERIFIED", + "ipPrefixConfiguredInIPCV4": [ + "0.0.0.0/22", + "0.0.0.0/23", + "0.0.0.0/22", + "0.0.0.0/22", + "0.0.0.0/24", + "0.0.0.0/19" + ], + "ipPrefixConfiguredInIPCV6": [ + "0000:0000::/29", + "0000:0000::/29" + ], + "ipPrefixConfiguredInSLV4": [ + "0.0.0.0/22", + "0.0.0.0/23", + "0.0.0.0/22", + "0.0.0.0/22", + "0.0.0.0/24", + "0.0.0.0/19" + ], + "ipPrefixConfiguredInSLV6": [ + "0000:0000::/29", + "0000:0000::/29" + ], + "ipPrefixLastCheckedAt": "2022-08-01T04:00:24.950Z", + "ipPrefixLastSLUpdateRequestAt": null, + "ipPrefixLastSLUpdateSuccessAt": "2022-07-27T06:42:37.410Z", + "ipPrefixLastErrorAt": "2024-08-02T00:27:07.910Z", + "deallocatedAt": null, + "ipPrefixLastErrorReason": "Sample Reason", + "company_id": "xxxxxxxxxxxxxxxxxxxxxxxx", + "deleted_at": "null,", + "created_at": "2021-08-24T00:29:51.456Z", + "updated_at": "2024-08-02T00:27:08.040Z" + } + ] + } + } + } + }, + "description": "OK", + "headers": {} + }, + "404": { + "description": "Not Found" + } + }, + "tags": ["ASNs"], + "description": "Lists ASNs associated to the specified company ID.

", + "operationId": "get-all-my-ASNs", + "summary": "Get all ASNs" + } + }, + "/app-user/{companyId}/gia-service": { + "post": { + "parameters": [ + { + "description": "The id of the company", + "example": "5e4cb418ab1dbe8c8476163b", + "name": "companyId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "examples": { + "DYNAMIC-private": { + "$ref": "#/components/examples/DYNAMIC-private" + }, + "DYNAMIC-public": { + "$ref": "#/components/examples/DYNAMIC-public" + }, + "STATIC": { + "$ref": "#/components/examples/STATIC" + } + }, + "schema": { + "properties": { + "accessPortId": { + "description": "The ID of the port to use for this IO-D service.", + "type": "string" + }, + "asnId": { + "description": "6210-4c68-82a5-f89fda2fd356 (string) - The ID of the ASN to use for this service (required for DYNAMIC GIA services).", + "type": "string" + }, + "autoAssignBgpKey": { + "description": "Whether to auto assign a BGP key for the service (only valid for DYNAMIC IO-D services). If true, a 24 character key using printable ASCII characters will be generated.", + "type": "boolean" + }, + "bgpKey": { + "description": "The BGP key to use for authentication of this service (required for DYNAMIC GIA services). Must be 6-24 characters long.", + "type": "string" + }, + "defaultOriginate": { + "description": "Whether to advertise only the default route (0.0.0.0/0) to the customer router. If true, only the default route is advertised; if false, the full routing table (hundreds of thousands of routes) is advertised.", + "type": "boolean" + }, + "duration": { + "description": "The duration the service was ordered for.", + "type": "object", + "properties": { + "quantity": { + "type": "number", + "description": "The duration amount." + }, + "unit": { + "type": "string", + "description": "The duration unit. Enum values day (`d`), week (`w`), month (`m`), year (`y`)" + } + } + }, + "enableIpv6": { + "description": "Whether this service should be IPv6-enabled.", + "type": "boolean" + }, + "ipv6Block": { + "description": "The mask size of a public IPv6 block to provision in addition to this service. Currently the only valid value for ipv6Block is 48.", + "type": "number" + }, + "ipblock": { + "description": "The mask size (26-30) of a public IPv4 block to provision in addition to this service. If not provided, no additional public IPv4 addresses will be provided. Larger block sizes can be requested from Console Connect support.", + "type": "number" + }, + "name": { + "description": "Name of the IO-D service.", + "type": "string" + }, + "privateAsn": { + "description": "Whether the service should be associated with a Private ASN.", + "type": "boolean" + }, + "privateAsnAutoAssign": { + "description": "Automatically generate and assign a valid Private ASN for the service.", + "type": "boolean" + }, + "privateAsnRequested": { + "description": "Set your own Private ASN (which will be validated against system rules).", + "type": "number" + }, + "rateLimit": { + "description": "The desired bandwidth of this service (in Mbps).", + "type": "number" + }, + "burstRate": { + "description": "The maximum data rate the service is capable of delivering within a short time frame (in Mbps). If burst rate is specified, the following validation rules will apply: Committed data rate limit minimum is set at 10% of remaining port capacity, also burstable bandwidth must exceed committed data rate, but not exceed remaining port capacity.", + "type": "number" + }, + "burstType": { + "description": "Burst type description, e.g. '95th Percentile'.", + "type": "string" + }, + "type": { + "description": "Specify the routing type; either DYNAMIC (for BGP) or STATIC.", + "type": "string" + }, + "vlanId": { + "description": "The VLAN ID of the access circuit (between the Access Port and a Console Connect Border Router). If not provided a VLAN ID will be automatically assigned.", + "type": "number" + }, + "paymentType": { + "description": "The method used to make payment for this service - The only valid and supported payment type for this service is via invoice.", + "type": "string", + "enum": ["invoice"] + }, + "discountCode": { + "type": "string" + } + }, + "required": [ + "accessPortId", + "name", + "rateLimit", + "type", + "enableIpv6", + "autoAssignBgpKey", + "defaultOriginate", + "duration", + "paymentType" + ] + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "id": "xxxxxxxxxxxxxxxxxxxxxxxx", + "companyId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "accessPortId": "xxxxxxxxxxxxxxxxxxxxxxxx", + "name": "gia-service", + "vlanId": 3001, + "rateLimit": { + "rate": 100, + "unit": "Mbps" + }, + "burstRate": { + "rate": 150, + "unit": "Mbps" + }, + "burstType": "95th Percentile", + "type": "DYNAMIC", + "asnId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "ipv4BlockId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "ipv6BlockId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "enableIpv6": true, + "customerRouterIpv4": "182.64.64.31", + "customerRouterIpv6": "2001:db8:85a3:0:0:8a2e:370:7334", + "consoleRouterIpv4": "182.64.64.32", + "consoleRouterIpv6": "2001:db8:85a3:0:0:8a2e:370:7335", + "linknetIpV4Block": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "linknetIpV6Block": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "bgpKey": "af83Le4Y5gGP8IgA9gaJ", + "staticRoutes": ["101.22.84.60/30"], + "giaSiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "giaOrderId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "status": "PROVISIONING", + "bgpStatus": null, + "peers": [ + { + "internal_ip": "182.64.64.31", + "external_ip": "182.64.64.32", + "bgp_status": "IDLE" + }, + { + "internal_ip": "2001:db8:85a3:0:0:8a2e:370:7334", + "external_ip": "2001:db8:85a3:0:0:8a2e:370:7335", + "bgp_status": "IDLE" + } + ], + "defaultOriginate": true, + "defaultOriginateIpv6": true + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Internet On-Demand (IO-D)"], + "description": "## Prerequisites:\n\n* Your company has been verified on the Console Connect platform.\n* Access Rights - User must have role: Network Admin/NETWORKCONTROL. You may verify your role **[here](https://app.consoleconnect.com/settings/members)**\n* You have specified a port with IO-D capability.\n* You have provided a valid ASN configuration:\n * Public ASN: To use a Public ASN, pass in `asnId`, the ID of a VERIFIED ASN attached to your company.\n * Private ASN: Set `privateAsn: true` and either `privateAsnAutoAssign: true` to have the system assign an ASN for you, or `privateAsnRequested` to set your own.", + "operationId": "provision-iod-service", + "summary": "Provision IO-D Service" + } + }, + "/app-user/{companyId}/gia-services": { + "get": { + "summary": "Get IO-D Services", + "description": "List your IO-D services.", + "operationId": "list-io-d-services", + "tags": ["Internet On-Demand (IO-D)"], + "parameters": [ + { + "description": "The ID of the company.", + "example": "5e4cb418ab1dbe8c8476163b", + "name": "companyId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "description": "Criteria for finding IO-D Services.", + "in": "query", + "name": "filter", + "required": true, + "schema": { + "$ref": "#/components/schemas/Filter" + }, + "examples": { + "pagination": { + "summary": "List IO-D services by page.", + "value": "{\n \"skip\": 10,\n \"limit\": 10\n}" + }, + "searchByName": { + "summary": "Search for IO-D services by status.", + "value": "{\n \"where\":{\"status\":\"ACTIVE\"},\n \"skip\": 0,\n \"limit\": 10\n}" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "example": [ + { + "id": "xxxxxxxxxxxxxxxxxxxxxxxx", + "companyId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "accessPortId": "xxxxxxxxxxxxxxxxxxxxxxxx", + "name": "gia-service", + "vlanId": 3001, + "rateLimit": { + "rate": 100, + "unit": "Mbps" + }, + "burstRate": { + "rate": 150, + "unit": "Mbps" + }, + "burstType": "95th Percentile", + "type": "DYNAMIC", + "asnId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "ipv4BlockId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "ipv6BlockId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "enableIpv6": true, + "customerRouterIpv4": "182.64.64.31", + "customerRouterIpv6": "2001:db8:85a3:0:0:8a2e:370:7334", + "consoleRouterIpv4": "182.64.64.32", + "consoleRouterIpv6": "2001:db8:85a3:0:0:8a2e:370:7335", + "linknetIpV4Block": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "linknetIpV6Block": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "bgpKey": "af83Le4Y5gGP8IgA9gaJ", + "staticRoutes": ["101.22.84.60/30"], + "giaSiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "giaOrderId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "status": "PROVISIONING", + "bgpStatus": null, + "peers": [ + { + "internal_ip": "182.64.64.31", + "external_ip": "182.64.64.32", + "bgp_status": "IDLE" + }, + { + "internal_ip": "2001:db8:85a3:0:0:8a2e:370:7334", + "external_ip": "2001:db8:85a3:0:0:8a2e:370:7335", + "bgp_status": "IDLE" + } + ], + "defaultOriginate": true, + "defaultOriginateIpv6": true + } + ], + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IoD" + } + } + } + } + } + } + } + }, + "/v2/gia-services/{giaId}": { + "delete": { + "parameters": [ + { + "description": "The id of the IO-D service that is to be deleted", + "name": "giaId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": {} + } + } + } + }, + "description": "OK", + "headers": {} + }, + "400": { + "content": { + "application/json": { + "examples": { + "Manual-SR": { + "summary": "Manual SR", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "Unable to delete IO-D Service. This is a manually billed IO-D Service, please email support@consoleconnect.com to request any changes" + } + } + }, + "IO-D-still-in-Contract": { + "summary": "IO-D still in Contract", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "Unable to delete IO-D Service as it is still in contract. Please email support@consoleconnect.com to request any changes" + } + } + } + } + } + }, + "description": "Bad Request", + "headers": {} + }, + "404": { + "content": { + "application/json": { + "examples": { + "response": { + "value": {} + } + } + } + }, + "description": "Not found", + "headers": {} + } + }, + "summary": "Delete IO-D service", + "operationId": "delete-iod-service", + "tags": ["Internet On-Demand (IO-D)"] + } + }, + "/app-user/{companyId}/gia-services/{giaId}": { + "get": { + "parameters": [ + { + "description": "The ID of the company", + "example": "5e4cb418ab1dbe8c8476163b", + "name": "companyId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the IO-D service.", + "example": "06327dfa-4e86-438b-af4c-3086be0a2467", + "name": "giaId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IoD" + }, + "example": { + "id": "xxxxxxxxxxxxxxxxxxxxxxxx", + "companyId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "accessPortId": "xxxxxxxxxxxxxxxxxxxxxxxx", + "name": "gia-service", + "vlanId": 3001, + "rateLimit": { + "rate": 100, + "unit": "Mbps" + }, + "burstRate": { + "rate": 150, + "unit": "Mbps" + }, + "burstType": "95th Percentile", + "type": "DYNAMIC", + "asnId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "ipv4BlockId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "ipv6BlockId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "enableIpv6": true, + "customerRouterIpv4": "182.64.64.31", + "customerRouterIpv6": "2001:db8:85a3:0:0:8a2e:370:7334", + "consoleRouterIpv4": "182.64.64.32", + "consoleRouterIpv6": "2001:db8:85a3:0:0:8a2e:370:7335", + "linknetIpV4Block": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "linknetIpV6Block": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "bgpKey": "af83Le4Y5gGP8IgA9gaJ", + "staticRoutes": ["101.22.84.60/30"], + "giaSiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "giaOrderId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "status": "PROVISIONING", + "bgpStatus": null, + "peers": [ + { + "internal_ip": "182.64.64.31", + "external_ip": "182.64.64.32", + "bgp_status": "IDLE" + }, + { + "internal_ip": "2001:db8:85a3:0:0:8a2e:370:7334", + "external_ip": "2001:db8:85a3:0:0:8a2e:370:7335", + "bgp_status": "IDLE" + } + ], + "defaultOriginate": true, + "defaultOriginateIpv6": true + } + } + }, + "description": "OK", + "headers": {} + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "example": { + "error": { + "statusCode": "404,", + "name": "Error", + "message": "There is no method to handle GET /v2/data-center-facilit/invalid" + } + } + } + } + } + }, + "tags": ["Internet On-Demand (IO-D)"], + "description": "Retrieves all of the details of a specific IO-D service by specifying the service ID.\nTo obtain your service ID, refer to **[Get IO-D Services](Internet-On-Demand-(IO-D)#operation/list-io-d-services)**.", + "operationId": "get-io-d-by-id", + "summary": "Get IO-D service by ID" + } + }, + "/app-user/{companyId}/gia-service/{giaId}/logs": { + "get": { + "parameters": [ + { + "description": "The ID of the company.", + "example": "5e4cb418ab1dbe8c8476163b", + "name": "companyId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the IO-D service.", + "example": "06327dfa-4e86-438b-af4c-3086be0a2467", + "name": "giaId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "limit": 10, + "skip": 0 + }, + "properties": { + "limit": { + "description": "The number of logs per page (for pagination).", + "example": 10 + }, + "skip": { + "description": "The number of logs to skip (for pagination).", + "example": 0 + } + }, + "required": ["skip", "limit"] + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "total": { + "type": "number", + "description": "The total number of logs." + }, + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "summary": { + "type": "string", + "description": "Log summary." + }, + "data": { + "type": "object", + "properties": { + "user": { + "type": "object", + "description": "The user responsible for this log.", + "properties": { + "name": { + "type": "string", + "description": "Correlating user's name." + }, + "id": { + "type": "string", + "description": "Correlating user's ID." + } + } + } + } + }, + "level": { + "type": "string", + "enum": ["INFO", "WARNING", "ERROR"], + "description": "Log report level." + }, + "created_at": { + "type": "string", + "description": "Log creation date." + } + } + } + } + } + }, + "example": { + "total": 2, + "results": [ + { + "summary": "Example log message", + "data": { + "user": { + "name": "Joe Bloggs", + "id": "5e4cb418ab1dbe8c8476163b" + } + }, + "level": "INFO", + "created_at": "2021-02-15T07:44:00.794Z" + }, + { + "summary": "Another example log message", + "data": { + "user": { + "name": "Joe Bloggs", + "id": "5e4cb418ab1dbe8c8476163b" + } + }, + "level": "INFO", + "created_at": "2021-02-18T04:23:47.822Z" + } + ] + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Internet On-Demand (IO-D)"], + "description": "View provisioning service logs of your IO-D service", + "operationId": "get-io-d-logs", + "summary": "Get IO-D service logs" + } + }, + "/app-user/{companyId}/gia-service/{giaId}/flex": { + "get": { + "parameters": [ + { + "description": "The ID of the company.", + "example": "5e4cb418ab1dbe8c8476163b", + "name": "companyId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the IO-D service.", + "example": "06327dfa-4e86-438b-af4c-3086be0a2467", + "name": "giaId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": [ + { + "id": "0b2478b1-5be8-4f29-8336-a49240acb90d", + "giaServiceId": "7bab11ba-11a6-45d3-90f7-4b77032dd8a0", + "type": "UPGRADE", + "status": "REQUESTED", + "active": false, + "scheduledAt": "2021-02-08T23:15:54.000Z", + "bandwidth": 450, + "lineItemId": "d38992d5-0f1a-405b-a146-8cc17f84efae", + "created_at": "2021-02-08T23:15:54.318Z", + "updated_at": "2021-02-08T23:15:54.436Z" + } + ] + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Internet On-Demand (IO-D)"], + "description": "Get the history of flex requests for an IO-D service.", + "operationId": "get-io-d-flex-requests", + "summary": "Get Flex Requests for IO-D service" + }, + "post": { + "parameters": [ + { + "description": "The ID of the company.", + "example": "5e4cb418ab1dbe8c8476163b", + "name": "companyId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the IO-D service.", + "example": "06327dfa-4e86-438b-af4c-3086be0a2467", + "name": "giaId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "bandwidth": 100 + }, + "properties": { + "bandwidth": { + "description": "The bandwidth to flex the service to. Must be a whole number greater than 0.", + "type": "number" + } + }, + "required": ["bandwidth"] + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "id": "0b2478b1-5be8-4f29-8336-a49240acb90d", + "giaServiceId": "7bab11ba-11a6-45d3-90f7-4b77032dd8a0", + "type": "UPGRADE", + "status": "REQUESTED", + "active": false, + "scheduledAt": "2021-02-08T23:15:54.000Z", + "bandwidth": "450", + "lineItemId": "d38992d5-0f1a-405b-a146-8cc17f84efae", + "created_at": "2021-02-08T23:15:54.318Z", + "updated_at": "2021-02-08T23:15:54.436Z" + } + } + }, + "description": "OK", + "headers": {} + }, + "400": { + "content": { + "application/json": { + "examples": { + "Already-processing": { + "summary": "Already processing", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "New Flex cannot be requested while there is a request already in progress." + } + } + }, + "Service-inactive": { + "summary": "Service inactive", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "Flex can only be requested when the service is active" + } + } + }, + "Invoice-only": { + "summary": "Invoice only", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "Flex can only be requested on a service which is set up to be paid by invoice." + } + } + }, + "Unavailable": { + "summary": "unavailable", + "value": { + "error": { + "statusCode": 400, + "name": "Error", + "message": "Flex cannot be requested on this service. To change the bandwidth of this service please contact support." + } + } + } + } + } + }, + "description": "Bad Request", + "headers": {} + }, + "422": { + "content": { + "application/json": { + "examples": { + "Price-not-available": { + "summary": "Price not available", + "value": { + "error": { + "statusCode": 422, + "name": "Error", + "message": "Flex price is not available for the requested bandwidth for this service." + } + } + }, + "Rate-Limit-is-not-a-number": { + "summary": "Rate Limit is not a number", + "value": { + "error": { + "statusCode": 422, + "name": "Error", + "message": "Rate limit should be an integer." + } + } + }, + "Rate-Limit-is-less-than-1Mbps": { + "summary": "Rate Limit is less than 1Mbps", + "value": { + "error": { + "statusCode": 422, + "name": "Error", + "message": "Rate limit cannot be less than 1Mbps" + } + } + } + } + } + }, + "description": "Unprocessable Entity", + "headers": {} + } + }, + "tags": ["Internet On-Demand (IO-D)"], + "description": "", + "operationId": "flex-io-d", + "summary": "Flex an IO-D service" + } + }, + "/app-user/{companyId}/gia-service/{giaId}/flex/current": { + "get": { + "parameters": [ + { + "description": "The id of the company", + "example": "5e4cb418ab1dbe8c8476163b", + "name": "companyId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "description": "The id of the IO-D service", + "example": "06327dfa-4e86-438b-af4c-3086be0a2467", + "name": "giaId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "latest": { + "id": "0b2478b1-5be8-4f29-8336-a49240acb90d", + "giaServiceId": "7bab11ba-11a6-45d3-90f7-4b77032dd8a0", + "type": "UPGRADE", + "status": "REQUESTED", + "active": false, + "scheduledAt": "2021-02-08T23:15:54.000Z", + "bandwidth": "450", + "lineItemId": "d38992d5-0f1a-405b-a146-8cc17f84efae", + "created_at": "2021-02-08T23:15:54.318Z", + "updated_at": "2021-02-08T23:15:54.436Z" + }, + "active": { + "id": "0b2478b1-5be8-4f29-8336-a49240acb90d", + "giaServiceId": "7bab11ba-11a6-45d3-90f7-4b77032dd8a0", + "type": "DOWNGRADE", + "status": "SUCCESS", + "active": true, + "scheduledAt": "2021-01-15T20:22:18.000Z", + "bandwidth": "50", + "lineItemId": "d38992d5-0f1a-405b-a146-8cc17f84efae", + "created_at": "2021-01-15T20:22:18.000Z", + "updated_at": "2021-01-15T20:22:18.000Z" + } + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Internet On-Demand (IO-D)"], + "description": "The active flex is any flex that has been processed and is currently active on the service.\nThe latest flex is the most recent flex request (which may still be processing).\nThe active and latest flex be the same record.\nIf there is no active flex, the active property in the response will be null.\nIf there are no flex requests at all, the latest property in the response will be null.", + "operationId": "get-io-d-flex", + "summary": "Get current IO-D service flex" + } + }, + "/app-user/{companyId}/gia-service/{giaId}/flex/history": { + "get": { + "parameters": [ + { + "description": "The id of the company", + "example": "5e4cb418ab1dbe8c8476163b", + "name": "companyId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the IO-D service.", + "example": "06327dfa-4e86-438b-af4c-3086be0a2467", + "name": "giaId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "contractBandwidth": 100, + "active": { + "id": "0b2478b1-5be8-4f29-8336-a49240acb90d", + "flexBandwidth": 200, + "totalBandwidth": 300, + "start": "2021-02-08T23:15:54.318Z", + "rate": 76.5 + }, + "pending": { + "id": "0b2478b1-5be8-4f29-8336-a49240acb90d", + "toBaseContract": false, + "bandwidth": 400 + }, + "results": [ + { + "id": "adae371a-7bfc-4c01-a9ee-d291f3ec237f", + "flexBandwidth": 350, + "totalBandwidth": 450, + "start": "2021-03-08T04:38:15.800Z", + "end": "2021-03-08T04:38:15.971Z", + "rate": 76.5, + "hours": "0.0001", + "total": 0.00765 + } + ], + "total": 1 + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Internet On-Demand (IO-D)"], + "description": "", + "operationId": "get-flex-history", + "summary": "Get IO-D service flex history" + } + }, + "/heartbeat": { + "get": { + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "response": { + "value": { + "name": "@iixlabs/portal-node-api", + "now": 1444957362993, + "uptime": 437874, + "humanUptime": "7 minutes ago", + "uptimeSeconds": 438, + "version": "3.14.34" + } + } + }, + "schema": { + "properties": { + "name": { + "example": "@iixlabs/portal-node-api", + "type": "string" + }, + "now": { + "example": 1444957362993, + "type": "number" + }, + "uptime": { + "example": 437874, + "type": "number" + }, + "humanUptime": { + "example": "7 minutes ago", + "type": "string" + }, + "uptimeSeconds": { + "example": 438, + "type": "number" + }, + "version": { + "example": "3.14.34", + "type": "string" + } + }, + "title": "Heartbeat response schema", + "type": "object" + } + } + }, + "description": "OK", + "headers": {} + } + }, + "tags": ["Heartbeat"], + "description": "Get the current deployed version on the server", + "operationId": "Heartbeat", + "summary": "Heartbeat" + } + }, + "/app-user/{id}/iot-order": { + "get": { + "parameters": [ + { + "description": "This correlates to the current API user's id.", + "in": "path", + "example": "5f97d3d2d85fbe0014fd1812", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "This field helps us filter, sort, limit and order the returned data.", + "in": "query", + "example": "{ fields: simPoolName | [\"simPoolName\",\"connectivityType\"], include: company | [\"company\",\"apn\"], limit: 10, order: asc | desc, skip: 10, where: {\"companyId\":\"5f97d3d2d85fbe0014fd1812\"}}", + "name": "filter", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": [ + { + "id": "017d9187-2452-45d6-97de-69b4cb4f7a0f", + "friendlyId": "IOTC38C11E9BC", + "simPoolId": null, + "simPoolName": "test 123456", + "companyId": "5f97d3d2d85fbe0014fd1812", + "apnId": "e3f8ae76-3b1a-40e0-ae29-4ed336b143e3", + "connectivityType": "PRIVATE", + "name": "test 123456", + "simQuantity": 1, + "deliveryAddress": null, + "companyAddress": "Lorem , Ipsum Text", + "orderType": "PAYG", + "dnsPreferred": "10.100.1.1", + "dnsAlternate": "10.100.1.2", + "useDefaultDNS": true, + "status": "ORDERED", + "error": null, + "userEmail": "user@example.com", + "deliveryEmail": null, + "paymentType": "INVOICE", + "offerType": null, + "endUser": null, + "skipUserEmail": false, + "skipAdminEmail": false, + "skipSupportEmail": false, + "skipCompliance": false, + "skipSlack": false, + "skipInsightSr": false, + "sourceEnterpriseId": null, + "simType": "PHYSICAL-SIM", + "productId": 1143474, + "description": "Lorem , Ipsum Text", + "manufacturer": "Thales (MADE IN CHINA)", + "purchaseDate": "2020-05-26T00:00:00.000Z", + "originalPurchaseOrder": "ZM1124438", + "purchaseProject": "IoT", + "eccn": "EAR99", + "hkHsCode": 85235200, + "currency": "USD", + "unitPrice": null, + "imsiProfileId": null, + "createdAt": "2024-07-08T11:09:19.386Z", + "updatedAt": "2024-07-15T12:38:48.933Z", + "deletedAt": null, + "updatedById": null, + "company_id": "5f97d3d2d85fbe0014fd1812", + "deleted_at": null, + "created_at": "2024-07-08T11:09:19.386Z", + "updated_at": "2024-07-15T12:38:48.933Z" + } + ], + "schema": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/components/schemas/get" + } + } + } + }, + "description": "OK", + "headers": {} + }, + "404": { + "description": "Error", + "content": { + "application/json": { + "example": { + "code": "MODEL_NOT_FOUND", + "message": "could not find a model with id 1279376404047642y3003273442324234", + "statusCode": 404, + "name": "Error" + }, + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchemaExtended" + } + } + }, + "headers": {} + } + }, + "tags": ["Edge SIM"], + "description": "Retrieves all Edge SIM orders enlisted under provided *id* field and filtered accordingly based on the Filter parameter", + "operationId": "GetEdgeSIMOrders", + "summary": "Get Edge SIM orders" + }, + "post": { + "parameters": [ + { + "description": "This correlates to the current API user's id.", + "in": "path", + "example": "5f97d3d2d85fbe0014fd1812", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "body": { + "type": "object", + "description": "This object contains all the necessary information required to create a new Edge SIM order.", + "required": [ + "companyId", + "connectivityType", + "name", + "simQuantity", + "orderType", + "status", + "paymentType" + ], + "properties": { + "id": { + "type": "string" + }, + "friendlyId": { + "type": "string" + }, + "simPoolId": { + "type": "string", + "description": "Once the order is PROCESSED the SIM pool will be created." + }, + "simPoolName": { + "type": "string" + }, + "companyId": { + "type": "string" + }, + "apnId": { + "type": "string" + }, + "connectivityType": { + "type": "string", + "description": "PUBLIC (Internet + Firewall) or PRIVATE (Private Connection)." + }, + "name": { + "type": "string" + }, + "simQuantity": { + "type": "string" + }, + "deliveryAddress": { + "type": "string" + }, + "companyAddress": { + "type": "string" + }, + "orderType": { + "type": "string", + "enum": ["PAYG", "TRIAL"] + }, + "dnsPreferred": { + "type": "string" + }, + "dnsAlternate": { + "type": "string" + }, + "useDefaultDNS": { + "type": "string" + }, + "status": { + "type": "string", + "enum": ["ORDERED"], + "default": "ORDERED" + }, + "error": { + "type": "string" + }, + "userEmail": { + "type": "string" + }, + "deliveryEmail": { + "type": "string" + }, + "paymentType": { + "type": "string", + "enum": ["INVOICE", "CREDITCARD"] + }, + "offerType": { + "type": "string" + }, + "simType": { + "type": "string", + "enum": ["PHYSICAL-SIM", "E-SIM"], + "default": "PHYSICAL-SIM" + }, + "productId": { + "type": "string", + "default": 1143474 + }, + "description": { + "type": "string", + "default": "IM Card, 2101721 PCCW GLOBAL 64K USIM(OP) - H(C)" + }, + "manufacturer": { + "type": "string", + "default": "Thales (MADE IN CHINA)" + }, + "purchaseDate": { + "type": "string", + "default": "2020-05-26T00:00:00.000Z" + }, + "originalPurchaseOrder": { + "type": "string", + "default": "ZM1124438" + }, + "purchaseProject": { + "type": "string", + "default": "IoT" + }, + "eccn": { + "type": "string", + "default": "EAR99" + }, + "hkHsCode": { + "type": "string", + "default": 85235200 + }, + "currency": { + "type": "string", + "default": "USD" + }, + "unitPrice": { + "type": "string" + }, + "imsiProfileId": { + "type": "string", + "description": "Associated with Plans which are not available yet." + }, + "createdAt": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "updatedAt": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "deletedAt": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "updatedById": { + "type": "string" + } + } + } + } + }, + "example": { + "name": "test 123456", + "orderType": "PAYG", + "simPoolName": "test 123456", + "companyId": "5f97d3d2d85fbe0014fd1812", + "apnId": "e3f8ae76-3b1a-40e0-ae29-4ed336b143e3", + "connectivityType": "PRIVATE", + "simQuantity": 1, + "simType": "PHYSICAL-SIM", + "dnsAlternate": "100.100.1.0", + "dnsPreferred": "100.100.2.0", + "useDefaultDNS": "true", + "paymentType": "INVOICE" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "id": "0433187-29b2-40d6-97de-69b3cb4f7a0f", + "friendlyId": "IOTC38C11E9BD", + "simPoolId": null, + "simPoolName": "test 123456", + "companyId": "5f97d3d2d85fbe0014fd1812", + "apnId": "e3f8ae76-3b1a-40e0-ae29-4ed336b143e3", + "connectivityType": "PRIVATE", + "name": "test 123456", + "simQuantity": 1, + "deliveryAddress": null, + "companyAddress": "Lorem , Ipsum Text", + "orderType": "PAYG", + "dnsPreferred": "10.100.1.1", + "dnsAlternate": "10.100.1.2", + "useDefaultDNS": true, + "status": "ORDERED", + "error": null, + "userEmail": "user@pccwglobal.com", + "deliveryEmail": null, + "paymentType": "INVOICE", + "offerType": null, + "endUser": null, + "skipUserEmail": false, + "skipAdminEmail": false, + "skipSupportEmail": false, + "skipCompliance": false, + "skipSlack": false, + "skipInsightSr": false, + "sourceEnterpriseId": null, + "simType": "PHYSICAL-SIM", + "productId": 1143474, + "description": "Lorem , Ipsum Text", + "manufacturer": "Thales (MADE IN CHINA)", + "purchaseDate": "2020-05-26T00:00:00.000Z", + "originalPurchaseOrder": "ZM1124438", + "purchaseProject": "IoT", + "eccn": "EAR99", + "hkHsCode": 85235200, + "currency": "USD", + "unitPrice": null, + "imsiProfileId": null, + "createdAt": "2024-07-08T11:09:19.386Z", + "updatedAt": "2024-07-15T12:38:48.933Z", + "deletedAt": null, + "updatedById": null, + "company_id": "5f97d3d2d85fbe0014fd1412", + "deleted_at": null, + "created_at": "2024-07-08T11:09:19.386Z", + "updated_at": "2024-07-15T12:38:48.933Z" + }, + "schema": { + "$ref": "#/components/schemas/get" + } + } + }, + "description": "OK", + "headers": {} + }, + "404": { + "description": "Error", + "content": { + "application/json": { + "example": { + "code": "MODEL_NOT_FOUND", + "message": "Could not find a model with id 1279376404047642y3003273442324234", + "statusCode": 404, + "name": "Error" + }, + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchemaExtended" + } + } + }, + "headers": {} + } + }, + "tags": ["Edge SIM"], + "description": "Creates a new Edge SIM order of this model type and returns it as a response", + "operationId": "CreateEdgeSIMOrder", + "summary": "Create Edge SIM order" + } + }, + "/app-user/{id}/iot-order/{orderId}": { + "post": { + "parameters": [ + { + "description": "This correlates to the current API user's id.", + "in": "path", + "example": "5f97d3d2d85fbe0014fd1812", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Edge SIM order id.", + "in": "path", + "example": "115973a6-f372-4ab5-a171-f3a52d334f48", + "name": "orderId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "id": "0433187-29b2-40d6-97de-69b3cb4f7a0f", + "friendlyId": "IOTC38C11E9BD", + "simPoolId": null, + "simPoolName": "test 123456", + "companyId": "5f97d3d2d85fbe0014fd1812", + "apnId": "e3f8ae76-3b1a-40e0-ae29-4ed336b143e3", + "connectivityType": "PRIVATE", + "name": "test 123456", + "simQuantity": 1, + "deliveryAddress": null, + "companyAddress": "Lorem , Ipsum Text", + "orderType": "PAYG", + "dnsPreferred": "10.100.1.1", + "dnsAlternate": "10.100.1.2", + "useDefaultDNS": true, + "status": "ORDERED", + "error": null, + "userEmail": "user@pccwglobal.com", + "deliveryEmail": null, + "paymentType": "INVOICE", + "offerType": null, + "endUser": null, + "skipUserEmail": false, + "skipAdminEmail": false, + "skipSupportEmail": false, + "skipCompliance": false, + "skipSlack": false, + "skipInsightSr": false, + "sourceEnterpriseId": null, + "simType": "PHYSICAL-SIM", + "productId": 1143474, + "description": "Lorem , Ipsum Text", + "manufacturer": "Thales (MADE IN CHINA)", + "purchaseDate": "2020-05-26T00:00:00.000Z", + "originalPurchaseOrder": "ZM1124438", + "purchaseProject": "IoT", + "eccn": "EAR99", + "hkHsCode": 85235200, + "currency": "USD", + "unitPrice": null, + "imsiProfileId": null, + "createdAt": "2024-07-08T11:09:19.386Z", + "updatedAt": "2024-07-15T12:38:48.933Z", + "deletedAt": null, + "updatedById": null, + "company_id": "5f97d3d2d85fbe0014fd1412", + "deleted_at": null, + "created_at": "2024-07-08T11:09:19.386Z", + "updated_at": "2024-07-15T12:38:48.933Z" + }, + "schema": { + "$ref": "#/components/schemas/get" + } + } + }, + "description": "OK", + "headers": {} + }, + "400": { + "description": "Error", + "content": { + "application/json": { + "example": { + "code": "MODEL_NOT_FOUND", + "message": "Could not find a model with id 1279376404047642y3003273442324234", + "statusCode": 404, + "name": "Error" + }, + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchemaExtended" + } + } + }, + "headers": {} + } + }, + "tags": ["Edge SIM"], + "description": "Get an Edge SIM order by id", + "operationId": "FindEdgeSIMOrders", + "summary": "Get an Edge SIM order by id" + } + }, + "/pricing/generate-pdf": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sendEMail": { + "type": "boolean", + "description": "Send pricing calculator result via email." + }, + "ports": { + "type": "array", + "description": "An array of ports objects.", + "items": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": ["CALCULATED", "EDITING", "INVALID"], + "description": "A status of the port" + }, + "location": { + "type": "string", + "description": "A location of the port." + }, + "dcfId": { + "type": "string", + "description": "ID of the port's data center facility." + }, + "speed": { + "type": "number", + "description": "The speed of the port in Gbps." + }, + "price": { + "type": "number", + "description": "The price of the port." + }, + "resetState": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": ["CALCULATED", "EDITING", "INVALID"], + "description": "The status of the port." + }, + "location": { + "type": "string", + "description": "The location of the port." + }, + "dcfId": { + "type": "string", + "description": "The ID of the port's data center facility." + }, + "speed": { + "type": "number", + "description": "The speed of the port in Gbps." + }, + "price": { + "type": "number", + "description": "The price of the port." + } + } + } + } + } + }, + "connections": { + "type": "array", + "description": "An array of connection objects.", + "items": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": ["CALCULATED", "EDITING", "INVALID"], + "description": "The status of the connection." + }, + "bandwidth": { + "type": "number", + "description": "The bandwidth of the connection." + }, + "duration": { + "type": "object", + "properties": { + "value": { + "type": "number", + "description": "A numerical value for connection duration, used in combination with 'unit'." + }, + "unit": { + "type": "string", + "description": "A unit of measurement for connection duration. For example, 'm','d','y','w'." + } + } + }, + "srcLocation": { + "type": "string", + "description": "The source (A-end) location of the connection." + }, + "category": { + "type": "string", + "description": "The category of connection." + }, + "destLocation": { + "type": "string", + "description": "The destination (Z-end) location of the connection." + }, + "classOfService": { + "type": "string", + "enum": ["GOLD", "SILVER", "BRONZE"], + "description": "The class of service of the connection." + }, + "srcCode": { + "type": "string", + "description": "The source code of the connection." + }, + "destCode": { + "type": "string", + "description": "The destination code of the connection." + }, + "price": { + "type": "number", + "description": "The price of the port." + }, + "priceOptions": { + "type": "array", + "description": "The price option description of the connection.", + "items": { + "type": "object", + "properties": { + "price": { + "type": "number", + "description": "The price or price option." + }, + "duration": { + "type": "object", + "properties": { + "from": { + "type": "null", + "description": "The \"from\" property in the connection's price options." + }, + "to": { + "type": "null", + "description": "The \"to\" property in the connection's price options." + }, + "value": { + "type": "number", + "description": "A numerical value for connection duration of connection, used in combination with 'unit'." + }, + "unit": { + "type": "string", + "description": "A unit of measurement for connection duration. For example, 'm', 'd', 'y', 'w'." + } + } + } + } + } + }, + "resetState": { + "properties": { + "status": { + "type": "string", + "enum": ["CALCULATED", "EDITING", "INVALID"], + "description": "The status of the connection." + }, + "bandwidth": { + "type": "number", + "description": "The bandwidth of the connection." + }, + "duration": { + "type": "object", + "properties": { + "value": { + "type": "number", + "description": "A numerical value for connection duration of connection, used in combination with 'unit'." + }, + "unit": { + "type": "string", + "description": "A unit of measurement for connection duration. For example, 'm', 'd', 'y', 'w'." + } + } + }, + "srcLocation": { + "type": "string", + "description": "The source location of the connection." + }, + "category": { + "type": "string", + "description": "The category of connection." + }, + "destLocation": { + "type": "string", + "description": "The destination location of the connection." + }, + "classOfService": { + "type": "string", + "enum": ["GOLD", "SILVER", "BRONZE"], + "description": "The class of service for the connection." + }, + "srcCode": { + "type": "string", + "description": "The source code of the connection." + }, + "destCode": { + "type": "string", + "description": "The destination code of the connection." + }, + "price": { + "type": "number", + "description": "The price of the port." + }, + "priceOptions": { + "type": "array", + "description": "The price option description for the connection.", + "items": { + "type": "object", + "properties": { + "price": { + "type": "number", + "description": "The price or price option." + }, + "duration": { + "type": "object", + "properties": { + "from": { + "type": "null", + "description": "The \"from\" property in the connection's price options." + }, + "to": { + "type": "null", + "description": "A to property in the connection's price options." + }, + "value": { + "type": "number", + "description": "A numerical value for connection duration of connection, used in combination with 'unit'." + }, + "unit": { + "type": "string", + "description": "A unit of measurement for connection duration. For example, 'm', 'd', 'y', 'w'." + } + } + } + } + } + } + } + } + } + } + }, + "internet": { + "type": "array", + "description": "An array of Internet on Demand objects.", + "items": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": ["CALCULATED", "EDITING", "INVALID"], + "description": "The status of the Internet on-Demand service." + }, + "bandwidth": { + "type": "number", + "description": "The bandwidth of the Internet on-Demand service." + }, + "duration": { + "type": "object", + "properties": { + "value": { + "type": "number", + "description": "A numerical value for duration of service, used in combination with 'unit'." + }, + "unit": { + "type": "string", + "description": "A unit of measurement for duration. For example, 'm', 'd', 'y', 'w'." + } + } + }, + "location": { + "type": "string", + "description": "The location of the Internet on Demand service." + }, + "price": { + "type": "number", + "description": "The price of the Internet on Demand service" + }, + "priceOptions": { + "type": "array", + "description": "Price options for the Internet on Demand service.", + "items": { + "type": "object", + "properties": { + "price": { + "type": "number", + "description": "A price or price option." + }, + "duration": { + "type": "object", + "properties": { + "from": { + "type": "number", + "description": "" + }, + "to": { + "type": "number", + "description": "" + }, + "value": { + "type": "number", + "description": "A value for duration of Internet on-Demand." + }, + "unit": { + "type": "string", + "description": "A unit of measurement for Internet on-Demand service." + } + } + } + } + } + }, + "resetState": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": ["CALCULATED", "EDITING", "INVALID"], + "description": "The status of the Internet on-Demand." + }, + "bandwidth": { + "type": "number", + "description": "The bandwidth of the Internet on-Demand service." + }, + "duration": { + "type": "object", + "properties": { + "value": { + "type": "number", + "description": "A value for duration." + }, + "unit": { + "type": "string", + "description": "A unit of measurement for duration of Internet on Demand." + } + } + }, + "location": { + "type": "string", + "description": "The location of the Internet on Demand service." + }, + "price": { + "type": "number", + "description": "Prices for the Internet on Demand service." + }, + "priceOptions": { + "type": "array", + "description": "Price options for the Internet on Demand service.", + "items": { + "type": "object", + "properties": { + "price": { + "type": "number", + "description": "The price or price options for the service." + }, + "duration": { + "type": "object", + "properties": { + "from": { + "type": "number", + "description": "" + }, + "to": { + "type": "number", + "description": "" + }, + "value": { + "type": "number", + "description": "A value for duration of Internet on Demand service." + }, + "unit": { + "type": "string", + "description": "A unit of measurement for Internet on Demand service." + } + } + } + } + } + } + } + } + } + } + }, + "CloudRouter": { + "type": "array", + "description": "An array of CloudRouter site objects.", + "items": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": ["CALCULATED", "EDITING", "INVALID"], + "description": "The status of the CloudRouter site." + }, + "duration": { + "type": "object", + "properties": { + "value": { + "type": "number", + "description": "A value for duration." + }, + "unit": { + "type": "string", + "description": "A unit of measurement for duration of CloudRouter site." + } + } + }, + "bandwidth": { + "type": "object", + "properties": { + "value": { + "type": "number", + "description": "Bandwidth of CloudRouter." + }, + "label": { + "type": "string", + "description": "Bandwidth label of CloudRouter." + } + } + }, + "sites": { + "type": "array", + "items": { + "type": "object", + "description": "An array of CloudRouter site objects.", + "properties": { + "category": { + "type": "string", + "description": "Category of CloudRouter site." + }, + "location": { + "type": "string", + "description": "The location of the CloudRouter site." + }, + "companyId": { + "type": "string", + "description": "The ID of the company used by CloudRouter site." + }, + "rateLimit": { + "type": "object", + "properties": { + "value": { + "type": "number", + "description": "Bandwidth (number) of CloudRouter site, to be used with 'unit'." + }, + "unit": { + "type": "string", + "description": "Bandwidth unit." + } + } + }, + "priceRefId": { + "type": "number", + "description": "The refId of priced CloudRouter site." + } + } + } + }, + "pricedSites": { + "type": "array", + "description": "An array of priced sites objects.", + "items": { + "type": "object", + "properties": { + "selectedClassOfService": { + "type": "string", + "enum": ["GOLD", "SILVER", "BRONZE"], + "description": "A selected class of service for priced CloudRouter sites.." + }, + "priceRefId": { + "type": "number", + "description": "A refId of priced CloudRouter site." + }, + "prices": { + "type": "object", + "properties": { + "hourlyCost": { + "type": "number", + "description": "The hourly cost of priced CloudRouter sites." + }, + "hourlyCostAmountSaved": { + "type": "number", + "description": "The amount per hour saved on the priced CloudRouter sites." + }, + "dailyCost": { + "type": "number", + "description": "The daily costof the priced CloudRouter sites." + }, + "monthlyCost": { + "type": "number", + "description": "The monthly cost of the priced CloudRouter sites." + } + } + }, + "site": { + "type": "object", + "properties": { + "portId": { + "type": "string", + "description": "The Id for the port of the CloudRouter site." + }, + "dcfId": { + "type": "string", + "description": "The dcfid of the CloudRouter site." + }, + "discountId": { + "type": "string", + "description": "The discountId for the CloudRouter site." + }, + "rateLimit": { + "type": "object", + "properties": { + "unit": { + "type": "string", + "description": "Unit of measurement for rate limit (Mbps only)." + }, + "rate": { + "type": "number", + "description": "The rate limit for the CloudRouter site in Mbps." + } + } + }, + "providerInfo": { + "type": "object", + "properties": { + "dcfName": { + "type": "string", + "description": "The provider of the CloudRouter site." + }, + "dcfId": { + "type": "string", + "description": "The cloudRouter site provider's dcfId." + }, + "metroId": { + "type": "string", + "description": "The CloudRouter site provider's metroId ." + }, + "city": { + "type": "string", + "description": "The CloudRouter site provider's city." + }, + "country": { + "type": "string", + "description": "The CloudRouter site provider's country." + }, + "countryDisplayName": { + "type": "string", + "description": "The CloudRouter site provider's country display name." + } + } + }, + "type": { + "type": "string", + "description": "The type of CloudRouter site." + } + } + }, + "displayName": { + "type": "string", + "description": "The display name of the priced CloudRouter site." + } + } + } + }, + "baseL3vpnCost": { + "type": "number", + "description": "The base cost of the CloudRouter site." + }, + "price": { + "type": "number", + "description": "The price of the CloudRouter." + }, + "resetState": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": ["CALCULATED", "EDITING", "INVALID"], + "description": "The status of the CloudRouter site." + }, + "duration": { + "type": "object", + "properties": { + "value": { + "type": "number", + "description": "A value for duration." + }, + "unit": { + "type": "string", + "description": "A unit of measurement for duration of CloudRouter site." + } + } + }, + "bandwidth": { + "type": "object", + "properties": { + "value": { + "type": "number", + "description": "Bandwidth of the CloudRouter." + }, + "label": { + "type": "string", + "description": "Bandwidth label for the CloudRouter." + } + } + }, + "sites": { + "type": "array", + "description": "An array of CloudRouter site objects.", + "items": { + "type": "object", + "properties": { + "category": { + "type": "string", + "description": "Category of CloudRouter site." + }, + "location": { + "type": "string", + "description": "Location of the CloudRouter site." + }, + "companyId": { + "type": "string", + "description": "An Id of company used by CloudRouter site." + }, + "rateLimit": { + "type": "object", + "properties": { + "value": { + "type": "number", + "description": "Bandwidth value of CloudRouter site." + }, + "unit": { + "type": "string", + "description": "Bandwidth Unit" + } + } + }, + "priceRefId": { + "type": "number", + "description": "The refId of the priced CloudRouter site." + } + } + } + }, + "pricedSites": { + "type": "array", + "description": "An array of pricedSites objects.", + "items": { + "type": "object", + "properties": { + "selectedClassOfService": { + "type": "string", + "enum": ["GOLD", "SILVER", "BRONZE"], + "description": "The selected class of service for priced CloudRouter sites." + }, + "priceRefId": { + "type": "number", + "description": "The refId of priced CloudRouter sites." + }, + "prices": { + "type": "object", + "properties": { + "hourlyCost": { + "type": "number", + "description": "The hourly cost for the priced CloudRouter sites." + }, + "hourlyCostAmountSaved": { + "type": "number", + "description": "The hourly cost amount saved for the priced CloudRouter sites." + }, + "dailyCost": { + "type": "number", + "description": "The daily cost of the priced CloudRouter sites." + }, + "monthlyCost": { + "type": "number", + "description": "The monthly cost of the priced CloudRouter sites." + } + } + }, + "site": { + "type": "object", + "properties": { + "portId": { + "type": "number", + "description": "The portId for the CloudRouter site." + }, + "dcfId": { + "type": "string", + "description": "The dcfid of the CloudRouter site." + }, + "discountId": { + "type": "string", + "description": "The discountId of the CloudRouter site." + }, + "rateLimit": { + "type": "object", + "properties": { + "unit": { + "type": "string", + "description": "The unit of measurement for rate limit (Mbps only)." + }, + "rate": { + "type": "number", + "description": "The rate limit amount." + } + } + }, + "providerInfo": { + "type": "object", + "properties": { + "dcfName": { + "type": "string", + "description": "The CloudRouter site provider's name." + }, + "dcfId": { + "type": "string", + "description": "The CloudRouter site provider's dcfId." + }, + "metroId": { + "type": "string", + "description": "The CloudRouter site provider's metroId." + }, + "city": { + "type": "string", + "description": "The CloudRouter site provider's city." + }, + "country": { + "type": "string", + "description": "The CloudRouter site provider's country." + }, + "countryDisplayName": { + "type": "string", + "description": "The CloudRouter site provider's country display name." + } + } + }, + "type": { + "type": "string", + "description": "The type of site." + } + } + }, + "displayName": { + "type": "string", + "description": "The display name of the priced CloudRouter site." + } + } + } + }, + "baseL3vpnCost": { + "type": "number", + "description": "The base cost of the CloudRouter site." + }, + "price": { + "type": "number", + "description": "The price of the CloudRouter service." + } + } + } + } + } + } + } + }, + "example": { + "portsArray": [ + { + "status": "CALCULATED", + "location": "Sydney, Australia", + "dcfId": "5efbdd1ef4fa0300142101ec", + "speed": 1, + "price": 300, + "resetState": { + "status": "CALCULATED", + "location": "Sydney, Australia", + "dcfId": "5efbdd1ef4fa0300142101ec", + "speed": 1, + "price": 300 + } + } + ], + "connectionsArray": [ + { + "status": "CALCULATED", + "bandwidth": 50, + "duration": { + "value": 3, + "unit": "d" + }, + "srcLocation": "Osaka, Japan", + "category": "datacenter", + "destLocation": "Tokyo, Japan", + "classOfService": "SILVER", + "srcCode": "JAP", + "destCode": "JAP", + "price": 11, + "priceOptions": [ + { + "price": 11, + "duration": { + "from": null, + "to": null, + "unit": "d", + "value": 1 + } + } + ], + "resetState": { + "status": "CALCULATED", + "bandwidth": 50, + "duration": { + "value": 3, + "unit": "d" + }, + "srcLocation": "Osaka, Japan", + "category": "datacenter", + "destLocation": "Tokyo, Japan", + "classOfService": "SILVER", + "srcCode": "JAP", + "destCode": "JAP", + "price": 11, + "priceOptions": [ + { + "price": 11, + "duration": { + "from": null, + "to": null, + "unit": "d", + "value": 1 + } + } + ] + } + } + ], + "iodArray": [ + { + "status": "CALCULATED", + "bandwidth": 10, + "duration": { + "value": 12, + "unit": "m" + }, + "location": "Taipei, Taiwan", + "price": 100, + "priceOptions": [ + { + "price": 7.23, + "duration": { + "from": null, + "to": null, + "unit": "d", + "value": 1 + }, + "code": "TAI" + } + ], + "resetState": { + "status": "CALCULATED", + "bandwidth": 10, + "duration": { + "value": 12, + "unit": "m" + }, + "location": "Taipei Taiwan", + "price": 100, + "priceOptions": [ + { + "price": 7.23, + "duration": { + "from": null, + "to": null, + "unit": "d", + "value": 1 + }, + "code": "TAI" + } + ] + } + } + ], + "cloudRouterArray": [ + { + "status": "CALCULATED", + "duration": { + "value": 2, + "unit": "m" + }, + "bandwidth": { + "value": 500, + "label": "500MB" + }, + "sites": [ + { + "category": "datacenter", + "location": "Buenos Aires Argentina", + "companyId": "undefined", + "rateLimit": { + "value": 100, + "unit": "mbps" + }, + "priceRefId": 0 + } + ], + "pricedSites": [ + { + "selectedClassOfService": "BRONZE", + "priceRefId": 0, + "prices": { + "BRONZE": { + "hourlyCost": 0.2397, + "hourlyCostAmountSaved": null, + "dailyCost": 5.7528, + "monthlyCost": 174.981 + }, + "SILVER": { + "hourlyCost": 0.2397, + "hourlyCostAmountSaved": null, + "dailyCost": 5.7528, + "monthlyCost": 174.981 + }, + "GOLD": { + "hourlyCost": 0.2397, + "hourlyCostAmountSaved": null, + "dailyCost": 5.7528, + "monthlyCost": 174.981 + } + }, + "site": { + "portId": null, + "dcfId": "62426d15ff842c00151d9f02", + "discountId": null, + "rateLimit": { + "unit": "MBPS", + "rate": 100 + }, + "providerInfo": { + "dcfName": "TEST_CR TICTAC DCF", + "dcfId": "62426d15ff842c00151d9f02", + "metroId": "77d9f1fbbcaa906f3cddb6d1", + "city": "Buenos Aires", + "country": "AR", + "countryDisplayName": "Argentina" + }, + "type": "COMPANY", + "displayName": "Data Center" + } + } + ], + "baseL3vpnCost": 100, + "price": 449.98, + "resetState": { + "status": "CALCULATED", + "duration": { + "value": 2, + "unit": "m" + }, + "bandwidth": { + "value": 500, + "label": "500MB" + }, + "sites": [ + { + "category": "datacenter", + "location": "Buenos Aires Argentina", + "companyId": "undefined", + "rateLimit": { + "value": 100, + "unit": "mbps" + }, + "priceRefId": 0 + } + ], + "pricedSites": [ + { + "selectedClassOfService": "BRONZE", + "priceRefId": 0, + "prices": { + "BRONZE": { + "hourlyCost": 0.2397, + "hourlyCostAmountSaved": null, + "dailyCost": 5.7528, + "monthlyCost": 174.981 + }, + "SILVER": { + "hourlyCost": 0.2397, + "hourlyCostAmountSaved": null, + "dailyCost": 5.7528, + "monthlyCost": 174.981 + }, + "GOLD": { + "hourlyCost": 0.2397, + "hourlyCostAmountSaved": null, + "dailyCost": 5.7528, + "monthlyCost": 174.981 + } + }, + "site": { + "portId": null, + "dcfId": "62426d15ff842c00151d9f02", + "discountId": null, + "rateLimit": { + "unit": "MBPS", + "rate": 100 + }, + "providerInfo": { + "dcfName": "TEST_CR TICTAC DCF", + "dcfId": "62426d15ff842c00151d9f02", + "metroId": "77d9f1fbbcaa906f3cddb6d1", + "city": "Buenos Aires", + "country": "AR", + "countryDisplayName": "Argentina" + }, + "type": "COMPANY" + }, + "displayName": "Data Center" + } + ], + "baseL3vpnCost": 100, + "price": 449.98 + } + } + ] + } + } + } + }, + "responses": { + "200": { + "content": { + "application/pdf": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "The PDF file that is generated.", + "headers": {} + } + }, + "tags": ["Pricing"], + "description": "Generate a PDF with pricing information.", + "operationId": "generate-pdf", + "summary": "Generate PDF" + } + }, + "/v2/support-tickets": { + "get": { + "summary": "Get support tickets for the logged in users company", + "tags": ["Support Tickets"], + "description": "Get a list of support tickets.", + "operationId": "GetSupportTicketsList", + "parameters": [ + { + "description": "Criteria for searching support tickets.", + "in": "query", + "name": "status", + "required": true, + "example": "open", + "schema": { + "type": "string", + "enum": ["open", "closed"] + } + }, + { + "in": "query", + "name": "page", + "schema": { + "type": "integer" + }, + "description": "The \"page\" of results from a query.", + "example": 1 + }, + { + "in": "query", + "name": "pageSize", + "schema": { + "type": "integer" + }, + "description": "The number of results to be returned in a query.", + "example": 200 + } + ], + "responses": { + "200": { + "description": "Returns an array of support tickets.", + "content": { + "application/json": { + "example": [ + { + "id": "INC000001234567", + "name": "Ticket Name Label", + "description": "This is the description of the ticket", + "priority": ["Low", "Medium", "High", "Critical"], + "status": "Acknowledged", + "ticketType": "Incident", + "creationDate": "2023-01-01T01:02:03.000+0000", + "notes": [ + { + "id": "category", + "text": "Console Connect", + "@type": "faultsymptom" + }, + { + "id": "item", + "text": "Billing", + "@type": "faultsymptom" + }, + { + "id": "type", + "text": "Cloud", + "@type": "faultsymptom" + }, + { + "id": "Email-Open Ticket", + "text": "An example note for communication about the ticket", + "worklogId": "WLG000012345678", + "@type": "worklog" + } + ], + "relatedParty": [ + { + "name": "Contact Name", + "phone": "+123456789", + "email": "contact.name@emaildomain.com" + } + ], + "relatedEntity": [ + { + "name": "AAA111", + "role": "customerId", + "@type": "RelatedEntity", + "@referredType": "Profile" + } + ], + "channel": { + "name": "Phone", + "@type": "Customer" + }, + "@type": "troubleTicket" + } + ] + } + } + }, + "401": { + "description": "Throws an error for an unauthorized request.", + "content": { + "application/json": { + "example": { + "error": { + "statusCode": "401,", + "name": "Error", + "message": "Support Ticket: ticketId does not exist or Company: companyId does not have permission to view it." + } + } + } + } + } + } + }, + "post": { + "summary": "Create support ticket", + "tags": ["Support Tickets"], + "description": "Create a support ticket for the logged in users company.", + "operationId": "CreateSupportTicket", + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "name": { + "type": "string", + "example": "Ticket Name Label" + }, + "description": { + "type": "string", + "example": "This is the description of the ticket" + }, + "issueType": { + "type": "string", + "enum": [ + "Application", + "Circuit Down", + "Circuit Flapping", + "Circuit taking errors", + "High Latency", + "Operational Request", + "Others", + "Packet Loss/Drops", + "Request Reason of Outage", + "Slow Response", + "Unstable" + ] + }, + "service": { + "properties": { + "id": { + "type": "string", + "example": "SR12345" + }, + "type": { + "type": "string", + "enum": [ + "Port", + "CloudRouter", + "Internet on Demand", + "Connection (L2)", + "Non-Console Service" + ], + "example": "Non-Console Service" + } + } + }, + "customerContact": { + "properties": { + "name": { + "type": "string", + "example": "Contact Name" + }, + "phone": { + "type": "string", + "example": "+123456789" + }, + "email": { + "type": "string", + "example": "contact.name@emaildomain.com" + } + } + } + } + }, + "examples": { + "Console_Service": { + "summary": "Creating a ticket for a Console Connect Service", + "description": "An example payload when raising a ticket for a service available in the /support-tickets/services list.\n", + "value": { + "name": "My ConsoleConnect speed issue", + "description": "My port has slow speeds between 8am and 9am GMT+7", + "issueType": "Slow Response", + "service": { + "id": "6631ce03ebae12a6ab633333", + "type": "Connection (L2)" + }, + "customerContact": { + "name": "Contact Name", + "phone": "+123456789", + "email": "contact.name@emaildomain.com" + } + } + }, + "Non-Console_Service": { + "summary": "Creating a ticket for a Non-Console Connect Service", + "description": "An example payload when raising a ticket for a service that is not available in the /support-tickets/services list.\n", + "value": { + "name": "My PCCW service latency issue", + "description": "My connection has high latency since 5/March", + "issueType": "High Latency", + "service": { + "id": "SR54321", + "type": "Non-Console Service" + }, + "customerContact": { + "name": "Contact Name", + "phone": "+123456789", + "email": "contact.name@emaildomain.com" + } + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Returns a single support ticket.", + "content": { + "application/json": { + "example": { + "id": "INC000001234567", + "name": "Ticket Name Label", + "description": "This is the description of the ticket", + "priority": ["Low", "Medium", "High", "Critical"], + "status": "Acknowledged", + "ticketType": "Incident", + "creationDate": "2023-01-01T01:02:03.000+0000", + "notes": [ + { + "id": "category", + "text": "Console Connect", + "@type": "faultsymptom" + }, + { + "id": "item", + "text": "Billing", + "@type": "faultsymptom" + }, + { + "id": "type", + "text": "Cloud", + "@type": "faultsymptom" + }, + { + "id": "Email-Open Ticket", + "text": "An example note for communication about the ticket", + "worklogId": "WLG000012345678", + "@type": "worklog" + } + ], + "relatedParty": [ + { + "name": "Contact Name", + "phone": "+123456789", + "email": "contact.name@emaildomain.com" + } + ], + "relatedEntity": [ + { + "name": "AAA111", + "role": "customerId", + "@type": "RelatedEntity", + "@referredType": "Profile" + } + ], + "channel": { + "name": "Phone", + "@type": "Customer" + }, + "@type": "troubleTicket" + } + } + } + }, + "400": { + "description": "Throws an error for an invalid ticket id.", + "content": { + "application/json": { + "example": { + "error": { + "statusCode": "404,", + "name": "Error", + "message": "Support Ticket: ticketId is not valid." + } + } + } + } + }, + "401": { + "description": "Throws an error for an unauthorized request.", + "content": { + "application/json": { + "example": { + "error": { + "statusCode": "401,", + "name": "Error", + "message": "Support Ticket: ticketId does not exist or Company: companyId does not have permission to view it." + } + } + } + } + } + } + } + }, + "/v2/support-tickets/{id}": { + "get": { + "summary": "Get support ticket by Id", + "tags": ["Support Tickets"], + "description": "Get a single support ticket.", + "operationId": "GetSupportTicketById", + "parameters": [ + { + "description": "The id of the support ticket.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "INC000001234567" + } + ], + "responses": { + "200": { + "description": "Returns a single support ticket.", + "content": { + "application/json": { + "example": { + "id": "INC000001234567", + "name": "Ticket Name Label", + "description": "This is the description of the ticket", + "priority": ["Low", "Medium", "High", "Critical"], + "status": "Acknowledged", + "ticketType": "Incident", + "creationDate": "2023-01-01T01:02:03.000+0000", + "notes": [ + { + "id": "category", + "text": "Console Connect", + "@type": "faultsymptom" + }, + { + "id": "item", + "text": "Billing", + "@type": "faultsymptom" + }, + { + "id": "type", + "text": "Cloud", + "@type": "faultsymptom" + }, + { + "id": "Email-Open Ticket", + "text": "An example note for communication about the ticket", + "worklogId": "WLG000012345678", + "@type": "worklog" + } + ], + "relatedParty": [ + { + "name": "Contact Name", + "phone": "+123456789", + "email": "contact.name@emaildomain.com" + } + ], + "relatedEntity": [ + { + "name": "AAA111", + "role": "customerId", + "@type": "RelatedEntity", + "@referredType": "Profile" + } + ], + "channel": { + "name": "Phone", + "@type": "Customer" + }, + "@type": "troubleTicket" + } + } + } + }, + "400": { + "description": "Throws an error for an invalid ticket id.", + "content": { + "application/json": { + "example": { + "error": { + "statusCode": "404,", + "name": "Error", + "message": "Support Ticket: ticketId is not valid." + } + } + } + } + }, + "401": { + "description": "Throws an error for an unauthorized request.", + "content": { + "application/json": { + "example": { + "error": { + "statusCode": "401,", + "name": "Error", + "message": "Support Ticket: ticketId does not exist or Company: companyId does not have permission to view it." + } + } + } + } + }, + "404": { + "description": "Throws an error for a support ticket that does not exist.", + "content": { + "application/json": { + "example": { + "error": { + "statusCode": "404,", + "name": "Error", + "message": "Support Ticket: ticketId does not exist." + } + } + } + } + } + } + } + }, + "/v2/support-tickets/services": { + "get": { + "summary": "List Console Services", + "tags": ["Support Tickets"], + "description": "Provides a list of Console Connect services that a support ticket can be created for.", + "operationId": "GetSupportTicketConsoleServices", + "responses": { + "200": { + "description": "Returns the resulting with the new note.", + "content": { + "application/json": { + "example": [ + { + "type": "Port", + "value": "6631ce03ebae12a6ab622222", + "label": "Sydney Port" + } + ] + } + } + }, + "401": { + "description": "Throws an error for an unauthorized request.", + "content": { + "application/json": { + "example": { + "error": { + "statusCode": "401,", + "name": "Error", + "message": "Support Ticket: ticketId does not exist or Company: companyId does not have permission to view it." + } + } + } + } + } + } + } + }, + "/v2/support-tickets/{id}/addNote": { + "post": { + "summary": "Add Note to support ticket", + "operationId": "AddNoteToSupportTicket", + "tags": ["Support Tickets"], + "description": "Adds a note to an existing support ticket.", + "parameters": [ + { + "description": "The id of the support ticket.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "INC000001234567" + } + ], + "requestBody": { + "description": "The note text.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SupportTicketNote" + } + } + } + }, + "responses": { + "200": { + "description": "Returns the resulting with the new note.", + "content": { + "application/json": { + "example": { + "id": "INC000001234567", + "name": "Ticket Name Label", + "description": "This is the description of the ticket", + "priority": ["Low", "Medium", "High", "Critical"], + "status": "Acknowledged", + "ticketType": "Incident", + "creationDate": "2023-01-01T01:02:03.000+0000", + "notes": [ + { + "id": "category", + "text": "Console Connect", + "@type": "faultsymptom" + }, + { + "id": "item", + "text": "Billing", + "@type": "faultsymptom" + }, + { + "id": "type", + "text": "Cloud", + "@type": "faultsymptom" + }, + { + "id": "Email-Open Ticket", + "text": "An example note for communication about the ticket", + "worklogId": "WLG000012345678", + "@type": "worklog" + } + ], + "relatedParty": [ + { + "name": "Contact Name", + "phone": "+123456789", + "email": "contact.name@emaildomain.com" + } + ], + "relatedEntity": [ + { + "name": "AAA111", + "role": "customerId", + "@type": "RelatedEntity", + "@referredType": "Profile" + } + ], + "channel": { + "name": "Phone", + "@type": "Customer" + }, + "@type": "troubleTicket" + } + } + } + }, + "400": { + "description": "Throws an error for an malformed/bad request.", + "content": { + "application/json": { + "examples": { + "invalid-ticket-id": { + "summary": "Invalid ticket Id", + "description": "The provided ticket Id is not valid.", + "value": { + "error": { + "statusCode": "404,", + "name": "Error", + "message": "Support Ticket: ticketId is not valid." + } + } + }, + "invalid-note": { + "summary": "Invalid note data", + "description": "The note data provided in the body is invalid.", + "value": { + "error": { + "statusCode": "400,", + "name": "Error", + "message": "Support Ticket Note is invalid: Ensure body includes a { noteText: 'text' } with a text size of >=1 characters and <= 4000 characters." + } + } + } + } + } + } + }, + "401": { + "description": "Throws an error for an unauthorized request.", + "content": { + "application/json": { + "example": { + "error": { + "statusCode": "401,", + "name": "Error", + "message": "Support Ticket: ticketId does not exist or Company: companyId does not have permission to view it." + } + } + } + } + }, + "404": { + "description": "Throws an error for a support ticket that does not exist.", + "content": { + "application/json": { + "example": { + "error": { + "statusCode": "404,", + "name": "Error", + "message": "Support Ticket: ticketId does not exist." + } + } + } + } + } + } + } + }, + "/v1/cad/report/dns/describeDomainOverview:": { + "post": { + "operationId": "post-cad-report-dns-describe-domain-overview", + "tags": ["Anti-DDoS"], + "summary": "Describe Domain Overview", + "description": "Retrieve a domain overview data for Anti-DDoS service.", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DescribeDomainOverviewRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DescribeDomainOverviewResponse" + } + } + } + }, + "400": { + "description": "Bad Request - Invalid input parameters" + }, + "404": { + "description": "Not Found - Domain not found" + } + } + } + }, + "/v1/cad/report/dns/describeDomainStatusCodeList": { + "post": { + "operationId": "post-cad-report-dns-describe-domain-status-code-list", + "tags": ["Anti-DDoS"], + "summary": "Describe Domain Status Code List", + "description": "Retrieve a list of domain status code data for Anti-DDoS service.", + "requestBody": { + "description": "Request body for describing domain status codes", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DescribeDomainStatusCodeListRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DescribeDomainStatusCodeListResponse" + } + } + } + }, + "400": { + "description": "Bad Request - Invalid input parameters" + }, + "404": { + "description": "Not Found - Domain not found" + } + } + } + }, + "/v1/cad/report/dns/describeDomainQPSList": { + "post": { + "operationId": "post-cad-report-dns-describe-domain-qps-list", + "tags": ["Anti-DDoS"], + "summary": "Describe domain QPS List", + "description": "Retrieve DNS Domain QPS Report", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DescribeDomainQPSListRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DescribeDomainQPSListResponse" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + } + } + } + }, + "/v1/cad/report/describeDomainAttackEvents": { + "post": { + "operationId": "post-cad-report-dns-describe-domain-attack-events", + "tags": ["Anti-DDoS"], + "summary": "Describe Domain Attack Events", + "requestBody": { + "description": "Request body for Describe Domain Attack Events", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DescribeDomainAttackEventsRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DescribeDomainAttackEventsResponse" + } + } + } + }, + "400": { + "description": "Bad Request - Invalid input parameters" + }, + "404": { + "description": "Not Found - Domain not found" + } + } + } + }, + "/app-user/{id}/iot-sim-pools": { + "get": { + "summary": "Lists all Edge SIM SIMPools.", + "tags": ["Edge SIM"], + "description": "List Edge SIM SIMPools for the logged-in user's company based on the given Company Id.", + "operationId": "ListEdgeSIMPools", + "parameters": [ + { + "description": "Company Id of currently logged in user.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + }, + { + "description": "Filter request as defined by filter criteria.", + "in": "query", + "example": "{ fields: asn | [\"asn\",\"orderId\"], include: asn | [\"asn\",\"orderId\"], limit: 10, order: asc | desc, skip: 10, where: {\"apnId\":\"238094-4546-2323-5687879-234\"}}", + "name": "filter", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns a list of all Edge SIM SIMPools.", + "content": { + "application/json": { + "example": [ + { + "id": "022bbd4d-42ae-4d2f-a563-7c517d50daaa", + "name": "Test Sim Pool", + "apnId": "e3408b3b-6d67-4983-3db2-ae0ddd4837df", + "companyId": "5f97d3d2d85fbe0014fd1812", + "subnet": "10.10.10.10/18", + "firewall": "DISABLED", + "firewallStatus": "SUCCESS", + "status": "CREATED", + "error": null, + "simCount": 2, + "primaryDNS": null, + "secondaryDNS": null, + "defaultPrimaryDNS": "1.1.1.1", + "defaultSecondaryDNS": "2.2.2.2", + "useDefaultDNS": true, + "customFirewallEnabled": false, + "customFirewallPolicies": [], + "apn": {}, + "company_id": "5f97d3d2d85fbe0014fd1812", + "apn_id": "e3408b3b-6d67-4983-3db2-ae0ddd4837df", + "created_at": "2024-08-16T08:46:45.476Z", + "updated_at": "2024-08-16T08:46:45.476Z" + } + ], + "schema": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/components/schemas/multipleResponse" + } + } + } + } + }, + "404": { + "description": "Throws an error for not found Edge SIM SIMPools under Company Id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchemaExtended" + } + } + } + } + } + }, + "post": { + "summary": "Creates a new instance of an Edge SIM SIMPool.", + "operationId": "CreatEdgeSIMPoolInstance", + "tags": ["Edge SIM"], + "description": "Creates a new instance of an Edge SIM SIMPool under current Company Id.", + "parameters": [ + { + "description": "Company Id of currently logged in user.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "description": "Field contains Information on Edge SIM SIMPool to be created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/single" + }, + "example": { + "name": "Test SIM Pool", + "apnId": "e3408b3b-6d67-4983-3db2-ae0ddd4837df", + "useDefaultDNS": true + } + } + } + }, + "responses": { + "200": { + "description": "Returns an Edge SIM SIMPools.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/singleResponse" + }, + "example": { + "id": "022bbd4d-42ae-4d2f-a563-7c517d50daaa", + "name": "Test SIM Pool", + "apnId": "e3408b3b-6d67-4983-3db2-ae0ddd4837df", + "companyId": "5f97d3d2d85fbe0014fd1812", + "subnet": "10.10.10.10/18", + "firewall": "DISABLED", + "firewallStatus": "SUCCESS", + "status": "CREATED", + "error": null, + "simCount": 2, + "primaryDNS": null, + "secondaryDNS": null, + "defaultPrimaryDNS": "1.1.1.1", + "defaultSecondaryDNS": "2.2.2.2", + "useDefaultDNS": true, + "customFirewallEnabled": false, + "customFirewallPolicies": [], + "apn": {}, + "company_id": "5f97d3d2d85fbe0014fd1812", + "apn_id": "e3408b3b-6d67-4983-3db2-ae0ddd4837df", + "created_at": "2024-08-16T08:46:45.476Z", + "updated_at": "2024-08-16T08:46:45.476Z" + } + } + } + }, + "400": { + "description": "Throws an error for not found Edge SIM SIMPools under Company Id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchemaExtended" + } + } + } + } + } + } + }, + "/app-user/{id}/iot-sim-pools/{iotSimPoolId}": { + "put": { + "summary": "Update a related item by id for Edge SIM SIMPool.", + "tags": ["Edge SIM"], + "description": "Updates a related item by id on respective Edge SIM SIMPool for the logged-in user's company based on the given Company Id.", + "operationId": "UpdateEdgeSIMPoolItemById", + "parameters": [ + { + "description": "Company Id of currently logged in user.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + }, + { + "description": "Edge SIM SimPool Id for the respective Edge SIM SIMPool.", + "in": "path", + "name": "iotSimPoolId", + "required": true, + "example": "e3408b4b-3d67-4953-3db2-ae3ddd483745", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "description": "Field contains Information on Edge SIM SIMPool to be updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/singleUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "Returns the respective Edge SIM SIMPool.", + "content": { + "application/json": { + "example": { + "id": "022bbd4d-42ae-4d2f-a563-7c517d50daaa", + "name": "Test SIM Pool", + "apnId": "e3408b3b-6d67-4983-3db2-ae0ddd4837df", + "companyId": "5f97d3d2d85fbe0014fd1812", + "subnet": "10.10.10.10/18", + "firewall": "DISABLED", + "firewallStatus": "SUCCESS", + "status": "CREATED", + "error": null, + "simCount": 2, + "primaryDNS": null, + "secondaryDNS": null, + "defaultPrimaryDNS": "1.1.1.1", + "defaultSecondaryDNS": "2.2.2.2", + "useDefaultDNS": true, + "customFirewallEnabled": false, + "customFirewallPolicies": [], + "apn": {}, + "company_id": "5f97d3d2d85fbe0014fd1812", + "apn_id": "e3408b3b-6d67-4983-3db2-ae0ddd4837df", + "created_at": "2024-08-16T08:46:45.476Z", + "updated_at": "2024-08-16T08:46:45.476Z" + }, + "schema": { + "$ref": "#/components/schemas/singleResponse" + } + } + } + }, + "404": { + "description": "Throws an error for not found Foreign Key on Edge SIM SIMPool under Company Id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchemaExtended" + } + } + } + } + } + }, + "delete": { + "summary": "Deletes a related item from the respective Edge SIM SIMPool by Id.", + "tags": ["Edge SIM"], + "description": "Deletes a related item from the respective Edge SIM SIMPool by Id from logged-in user's company based on the given Company Id.", + "operationId": "DeleteEdgeSIMPoolItemById", + "parameters": [ + { + "description": "Company Id of currently logged in user.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + }, + { + "description": "Iot SimPool Id for the respective Edge SIM SIMPool.", + "in": "path", + "name": "iotSimPoolId", + "required": true, + "example": "e3408b4b-3d67-4953-3db2-ae3ddd483745", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Request was successfully executed." + }, + "400": { + "description": "Throws an error for not found Foreign Key on Edge SIM SIMPools under Company Id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchemaExtended" + } + } + } + } + } + } + }, + "/app-user/{id}/iot-sim-pools/{destinationSimPoolId}/sims": { + "put": { + "summary": "Adds new SIM to an Edge SIM SIMPool.", + "operationId": "AddSIMToEdgeSIMPool", + "tags": ["Edge SIM"], + "description": "Updates a related item by id on respective Edge SIM SIMPool for the logged-in user's company based on the given Company Id.", + "parameters": [ + { + "description": "Company Id of currently logged in user.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + }, + { + "description": "Destination SIMPool Id where to inject the respective Edge SIM SIMs.", + "in": "path", + "name": "destinationSimPoolId", + "required": true, + "example": "022bbd4d-42ae-4d2f-a563-7c517d50daaa", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "description": "SIMs to be moved.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/moveSimsToSimPool" + }, + "example": { + "sims": { + "25794c1d-36f8-4619-ab79-df742fba0b68": [ + "454003050504933", + "454003050504723" + ] + } + } + } + } + }, + "responses": { + "204": { + "description": "Request was successfully executed." + }, + "400": { + "description": "Throws an error for not found Foreign Key on Edge SIM SIMPools under Company Id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchemaExtended" + } + } + } + } + } + } + }, + "/app-user/{id}/iot-sims-cache": { + "get": { + "summary": "Get a list of Edge SIMs for the logged in users company", + "tags": ["Edge SIM"], + "description": "Get a list of Edge SIM.", + "operationId": "GetEdgeSIMList", + "parameters": [ + { + "description": "Company Id of currently logged in user.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + }, + { + "description": "Filter request as defined by filter criteria.", + "in": "query", + "example": "{ fields: asn | [\"asn\",\"orderId\"], include: asn | [\"asn\",\"orderId\"], limit: 10, order: asc | desc, skip: 10, where: {\"apnId\":\"238094-4546-2323-5687879-234\"}}", + "name": "filter", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns an array of Edge SIMs.", + "content": { + "application/json": { + "example": [ + { + "id": "5ea242303962644b52fc4346", + "iotSimPoolId": "string", + "iotOrderId": "string", + "state": "string", + "iccid": "string", + "imsi": "string", + "msisdn": "string", + "detectedImei": "string", + "ipAddress": "string", + "companyId": "string", + "label": "string", + "status": "string", + "simTransferId": "string", + "createdAt": "2024-08-13T09:38:50.268Z", + "updatedAt": "2024-08-13T09:38:50.268Z", + "simProvider": "telna", + "company_id": "string", + "iot_order_id": "string", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "iot_sim_pool_id": "string" + } + ], + "schema": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/components/schemas/getAll" + } + } + } + } + }, + "401": { + "description": "Throws an error for not found Keys or SIMs.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + } + }, + "/app-user/{id}/iot-sims-cache/{iotSimId}": { + "get": { + "summary": "Get a SIM item of Edge SIM.", + "tags": ["Edge SIM"], + "description": "Get single Edge SIM.", + "operationId": "GetSingleEdgeSIM", + "parameters": [ + { + "description": "User ID of currently logged in user.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + }, + { + "description": "IoT SIM identifier", + "in": "path", + "example": "0433187-29b2-40d6-97de-69b3cb4f7a0f", + "name": "iotSimId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns a related item of Edge SIM.", + "content": { + "application/json": { + "example": { + "id": "5ea242303962644b52fc4346", + "iotSimPoolId": "string", + "iotOrderId": "string", + "state": "string", + "iccid": "string", + "imsi": "string", + "msisdn": "string", + "detectedImei": "string", + "ipAddress": "string", + "companyId": "string", + "label": "string", + "status": "string", + "simTransferId": "string", + "createdAt": "2024-08-13T09:38:50.268Z", + "updatedAt": "2024-08-13T09:38:50.268Z", + "simProvider": "telna", + "company_id": "string", + "iot_order_id": "string", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "iot_sim_pool_id": "string" + }, + "schema": { + "$ref": "#/components/schemas/getAll" + } + } + } + }, + "404": { + "description": "Throws an error for not found Keys or SIMs.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + }, + "put": { + "summary": "Update Edge SIM.", + "operationId": "UpdateEdgeSIM", + "tags": ["Edge SIM"], + "description": "Attributes of the SIM can be updated(one or multiple together).", + "parameters": [ + { + "description": "User ID of currently logged in user.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + }, + { + "description": "IoT SIM identifier", + "in": "path", + "example": "0433187-29b2-40d6-97de-69b3cb4f7a0f", + "name": "iotSimId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "description": "Further details for some of the field.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/update" + }, + "example": { + "status": "PAUSED" + } + } + } + }, + "responses": { + "200": { + "description": "Returns a related item of Edge SIM.", + "content": { + "application/json": { + "example": { + "id": "5ea242303962644b52fc4346", + "iotSimPoolId": "string", + "iotOrderId": "string", + "state": "string", + "iccid": "string", + "imsi": "string", + "msisdn": "string", + "detectedImei": "string", + "ipAddress": "string", + "companyId": "string", + "label": "string", + "status": "string", + "simTransferId": "string", + "createdAt": "2024-08-13T09:38:50.268Z", + "updatedAt": "2024-08-13T09:38:50.268Z", + "simProvider": "telna", + "company_id": "string", + "iot_order_id": "string", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "iot_sim_pool_id": "string" + } + } + } + }, + "400": { + "description": "Throws an error for not found Keys or SIMs.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + } + }, + "/v2/iot-imsi-profile": { + "get": { + "summary": "Get a list of IoT IMSI Profile Plans", + "tags": ["Edge SIM"], + "description": "Get a list of IoT IMSI Profile Plans.", + "operationId": "GetConsoleProfilePlanList", + "parameters": [ + { + "description": "Filter request as defined by filter criteria.", + "in": "query", + "example": "{ fields: imsiType | [\"imsiType\"], include: imsiType | [\"imsiType\"], limit: 10, order: asc | desc, skip: 10, where: {\"id\":\"238094-4546-2323-5687879-234\"}}", + "name": "filter", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns an array of IoT IMSI Profile Plans.", + "content": { + "application/json": { + "example": [ + { + "id": "5ea242303962644b52fc4346", + "name": "string", + "imsiTypeId": "string", + "simType": "string", + "shieldOnly": false, + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + } + ], + "schema": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/components/schemas/getAll-2" + } + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plans.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + } + }, + "/v2/iot-imsi-profile/findOne": { + "get": { + "summary": "Get Single IoT IMSI Profile Plan by Filter", + "tags": ["Edge SIM"], + "description": "Find first instance of the model matched by filter from the data source.", + "operationId": "GetConsoleProfilePlanByFilter", + "parameters": [ + { + "description": "Filter request as defined by filter criteria.", + "in": "query", + "example": "{ fields: imsiType | [\"imsiType\"], include: imsiType | [\"imsiType\"], limit: 10, order: asc | desc, skip: 10, where: {\"id\":\"238094-4546-2323-5687879-234\"}}", + "name": "filter", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns an array of IoT IMSI Profile Plans.", + "content": { + "application/json": { + "example": { + "id": "string", + "name": "string", + "simType": "string", + "imsiTypeId": "string", + "shieldOnly": "boolean", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + }, + "schema": { + "type": "object", + "$ref": "#/components/schemas/get-2" + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plans.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + } + }, + "/v2/iot-imsi-profile/{id}": { + "get": { + "summary": "Get a single IoT IMSI Profile Plan based on ID", + "tags": ["Edge SIM"], + "description": "Get a single IoT IMSI Profile Plan based on ID.", + "operationId": "GetSingleConsoleProfilePlanList", + "parameters": [ + { + "description": "Target IoT IMSI Profile Plan ID.", + "in": "path", + "required": true, + "example": "567777-5h5678-hjtj600h6-666666", + "name": "id", + "schema": { + "type": "string" + } + }, + { + "description": "Filter request as defined by filter criteria.", + "in": "query", + "example": "{ fields: imsiType | [\"imsiType\"], include: imsiType | [\"imsiType\"]}", + "name": "filter", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns a IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": { + "id": "string", + "name": "string", + "simType": "string", + "imsiTypeId": "string", + "shieldOnly": "boolean", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + } + }, + "/v2/iot-imsi-profile/{id}/imsiType": { + "get": { + "summary": "Get All IoT IMSI Profile Plan Types by ID", + "tags": ["Edge SIM"], + "description": "Get All IoT IMSI Profile Plan Types associated or belonging to IoT IMSI Profile Plan ID.", + "operationId": "GetPlanTypesConsoleList", + "parameters": [ + { + "description": "Target IoT IMSI Profile Plan ID.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns All IoT IMSI Profile Plan Types.", + "content": { + "application/json": { + "example": [ + { + "id": "5ea242303962644b52fc4346,", + "name": "string,", + "externalImsiProfileId": "string,", + "provider": "string,", + "inventoryId": "string,", + "subscriptionPackageType": "Error", + "subscriptionPackageTemplateId": "Error", + "subscriptionPackageTemplateDesc": "Error", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + } + ] + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + } + }, + "/v2/iot-imsi-profile/{id}/apns": { + "get": { + "summary": "Get all IoT APNs related to a IoT IMSI Profile Plan based on Plan ID", + "tags": ["Edge SIM"], + "description": "Get all IoT APNs related to a IoT IMSI Profile Plan based on Plan ID.", + "operationId": "GetApnsPlanListById", + "parameters": [ + { + "description": "Target IoT IMSI Profile Plan ID.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + }, + { + "description": "Filter request as defined by filter criteria.", + "in": "query", + "example": "{ where: {\"friendlyName\":\"test\"}}", + "name": "filter", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns IoT APNs of a IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": [ + { + "id": "5ea242303962644b52fc4346", + "apn": "apn2", + "location": "london", + "friendlyName": "apn2", + "subnet": "1.1.1.1/12", + "ipAvailable": true, + "serviceType": "5ea242303962644b52fc4346", + "dbConnection": "string", + "apnAcl": "string", + "apnVrf": "string", + "router1": "0.0.0.0", + "router2": "0.0.0.0", + "priority": 1, + "createdByAgent": "agent", + "capacitySoftLimit": "number", + "capacityHardLimit": "number", + "firewallDevice": "string", + "adom": "adom", + "vdom": "vdom", + "notificationProvider": "standard", + "complianceProvider": "manual", + "billingProvider": "insight", + "simPoolProvider": "self", + "simProvider": "telna", + "subnetProvider": "demo", + "dnsProvider": "string", + "ipAllocatorProvider": "none", + "radiusProvider": "radius", + "firewallProvider": "mplsInterface", + "templateProvider": "custom", + "internetRouteTarget": "string", + "primaryDNS": "string", + "secondaryDNS": "boolean", + "apnVrfRt": "boolean", + "genericIp": "boolean", + "mplsInterface": "boolean", + "internetInterface": "boolean", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + } + ], + "schema": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/components/schemas/apn-get" + } + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + }, + "post": { + "summary": "Create a New IoT APN using related to Plan ID", + "tags": ["Edge SIM"], + "description": "Create a New IoT APN related to the target IoT IMSI Profile Plan based on Plan ID.", + "operationId": "CreateApnByPlanId", + "parameters": [ + { + "description": "Target IoT IMSI Profile Plan ID.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apn-get" + } + } + } + }, + "responses": { + "200": { + "description": "Returns a single IoT APN.", + "content": { + "application/json": { + "example": { + "apn": "apn2", + "location": "london", + "friendlyName": "5ea242303962644b52fc4346", + "subnet": "string", + "ipAvailable": false, + "serviceType": "5ea242303962644b52fc4346", + "dbConnection": "string", + "apnAcl": "string", + "apnVrf": "string", + "router1": "0.0.0.0", + "router2": "0.0.0.0", + "priority": 1, + "createdByAgent": "5ea242303962644b52fc4346", + "capacitySoftLimit": 2, + "capacityHardLimit": 2, + "firewallDevice": "string", + "adom": "string", + "vdom": "string", + "notificationProvider": "string", + "complianceProvider": "manual", + "billingProvider": "insight", + "simPoolProvider": "self", + "simProvider": "telna", + "subnetProvider": "demo", + "dnsProvider": "string", + "ipAllocatorProvider": "none", + "radiusProvider": "radius", + "firewallProvider": "mplsInterface", + "templateProvider": "custom", + "internetRouteTarget": "string", + "primaryDNS": "0.0.0.0", + "secondaryDNS": true, + "apnVrfRt": true, + "genericIp": true, + "mplsInterface": true, + "internetInterface": true, + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + } + } + } + }, + "400": { + "description": "Throws an error for an invalid IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": { + "properties": { + "error": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "statusCode": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + }, + "401": { + "description": "Throws an error for an unauthorized request.", + "content": { + "application/json": { + "example": { + "error": { + "statusCode": "401,", + "name": "Error", + "message": "IoT IMSI Plan: ID does not exist or Roles and Policies Missing: CompanyId does not have permission to use it." + } + } + } + } + } + } + }, + "delete": { + "summary": "Deletes All IoT APN using related to Plan ID", + "tags": ["Edge SIM"], + "description": "Deletes All IoT APN related to the target IoT IMSI Profile Plan based on Plan ID.", + "operationId": "DeleteApnByPlanId", + "parameters": [ + { + "description": "Target IoT IMSI Profile Plan ID.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Returns Request was successful." + }, + "400": { + "description": "Throws an error for an invalid IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": { + "properties": { + "error": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "statusCode": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + }, + "401": { + "description": "Throws an error for an unauthorized request.", + "content": { + "application/json": { + "example": { + "error": { + "statusCode": "401,", + "name": "Error", + "message": "IoT IMSI Plan: ID does not exist or Roles and Policies Missing: CompanyId does not have permission to use it." + } + } + } + } + } + } + } + }, + "/v2/iot-imsi-profile/{id}/apns/count": { + "get": { + "summary": "Get Count of IoT APNs by Plan ID", + "tags": ["Edge SIM"], + "description": "Get Count of IoT APNs related to a IoT IMSI Profile Plan based on Plan ID.", + "operationId": "GetCountApnsByPlanId", + "parameters": [ + { + "description": "Target IoT IMSI Profile Plan ID.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + }, + { + "description": "Where string object containing keys and properties to filter by.", + "in": "query", + "example": "{\"apnAcl\":\"test\"}", + "name": "where", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns IoT APNs of a IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": { + "count": 10 + }, + "schema": { + "type": "object", + "properties": { + "count": { + "type": "number" + } + } + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + } + }, + "/v2/admin/iot-imsi-profile": { + "get": { + "summary": "Get a list of IoT IMSI Profile Plans", + "tags": ["Edge SIM"], + "description": "Get a list of IoT IMSI Profile Plans matched by filter.", + "operationId": "GetAdminProfilePlanList", + "parameters": [ + { + "description": "Filter request as defined by filter criteria.", + "in": "query", + "example": "{ fields: imsiType | [\"imsiType\"], include: imsiType | [\"imsiType\"], limit: 10, order: asc | desc, skip: 10, where: {\"id\":\"238094-4546-2323-5687879-234\"}}", + "name": "filter", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns an array of IoT IMSI Profile Plans.", + "content": { + "application/json": { + "example": [ + { + "id": "5ea242303962644b52fc4346", + "name": "Test", + "imsiTypeId": "5ea242303962644b52fc4346", + "simType": "E-SIM", + "shieldOnly": false, + "updatedBy": "ca8fd4aa-a509-43e5-aa32-8bd2926c9779", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + } + ], + "schema": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/components/schemas/getAll-3" + } + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plans.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + }, + "post": { + "summary": "Create New IoT IMSI Profile Plan", + "tags": ["Edge SIM"], + "description": "Create New IoT IMSI Profile Plan.", + "operationId": "PostAdminProfilePlanList", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/getAll-3" + } + } + } + }, + "responses": { + "200": { + "description": "Returns a Single IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": { + "id": "5ea242303962644b52fc4346", + "name": "Test", + "simType": "E-SIM", + "imsiTypeId": "5ea242303962644b52fc4346", + "shieldOnly": false, + "updatedBy": "ca8fd4aa-a509-43e5-aa32-8bd2926c9779", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + }, + "schema": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/components/schemas/get-3" + } + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + }, + "patch": { + "summary": "Patch Existing or Create New IoT IMSI Profile Plan", + "tags": ["Edge SIM"], + "description": "Patch Existing or Create New IoT IMSI Profile Plan based on ID.", + "operationId": "PatchAdminProfilePlanList", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/getAll-3" + } + } + } + }, + "responses": { + "200": { + "description": "Returns a Single IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": { + "id": "5ea242303962644b52fc4346", + "name": "Test", + "simType": "E-SIM", + "imsiTypeId": "5ea242303962644b52fc4346", + "shieldOnly": false, + "updatedBy": "ca8fd4aa-a509-43e5-aa32-8bd2926c9779", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + }, + "schema": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/components/schemas/get-3" + } + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + }, + "put": { + "summary": "Replace Existing or Insert New IoT IMSI Profile Plan", + "tags": ["Edge SIM"], + "description": "Replace Existing or Insert New IoT IMSI Profile Plan based on ID.", + "operationId": "PutAdminProfilePlanList", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/getAll-3" + } + } + } + }, + "responses": { + "200": { + "description": "Returns a Single IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": { + "id": "5ea242303962644b52fc4346", + "name": "Test", + "simType": "E-SIM", + "imsiTypeId": "5ea242303962644b52fc4346", + "shieldOnly": false, + "updatedBy": "ca8fd4aa-a509-43e5-aa32-8bd2926c9779", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + }, + "schema": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/components/schemas/get-3" + } + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + } + }, + "/v2/admin/iot-imsi-profile/{id}": { + "get": { + "summary": "Get an IoT IMSI Profile Plan By ID", + "tags": ["Edge SIM"], + "description": "Get an IoT IMSI Profile Plan matched by ID and/or Filter.", + "operationId": "GetAdminPlanById", + "parameters": [ + { + "description": "Target ID to find IoT IMSI Profile Plan By.", + "in": "path", + "example": "238094-4546-2323-5687879-234", + "name": "id", + "schema": { + "type": "string" + } + }, + { + "description": "Filter request as defined by filter criteria.", + "in": "query", + "example": "{ fields: imsiType | [\"imsiType\"], include: imsiType | [\"imsiType\"], limit: 10, order: asc | desc, skip: 10, where: {\"name\":\"test\"}}", + "name": "filter", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns an IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": { + "id": "5ea242303962644b52fc4346", + "name": "Test", + "simType": "E-SIM", + "imsiTypeId": "5ea242303962644b52fc4346", + "shieldOnly": false, + "updatedBy": "ca8fd4aa-a509-43e5-aa32-8bd2926c9779", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + }, + "schema": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/components/schemas/get-3" + } + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + }, + "head": { + "summary": "Check Existing IoT IMSI Profile Plan", + "tags": ["Edge SIM"], + "description": "Check Existing IoT IMSI Profile Plan By ID.", + "operationId": "HeadAdminPlanById", + "parameters": [ + { + "description": "Target ID to check IoT IMSI Profile Plan By.", + "in": "path", + "example": "238094-4546-2323-5687879-234", + "name": "id", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns a Single IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": { + "exists": true + }, + "schema": { + "type": "object", + "properties": { + "exists": { + "type": "string" + } + } + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + }, + "patch": { + "summary": "Patch Existing or Create New IoT IMSI Profile Plan", + "tags": ["Edge SIM"], + "description": "Patch Existing IoT IMSI Profile Plan based on ID.", + "operationId": "PatchAdminPlanById", + "parameters": [ + { + "description": "Target ID to check IoT IMSI Profile Plan By.", + "in": "path", + "example": "238094-4546-2323-5687879-234", + "name": "id", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/getAll-3" + } + } + } + }, + "responses": { + "200": { + "description": "Returns a Single IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": { + "id": "5ea242303962644b52fc4346", + "name": "Test", + "simType": "E-SIM", + "imsiTypeId": "5ea242303962644b52fc4346", + "shieldOnly": false, + "updatedBy": "ca8fd4aa-a509-43e5-aa32-8bd2926c9779", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + }, + "schema": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/components/schemas/get-3" + } + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + }, + "put": { + "summary": "Edit Existing IoT IMSI Profile Plan", + "tags": ["Edge SIM"], + "description": "Edit Existing IoT IMSI Profile Plan based on ID.", + "operationId": "PutAdminPlanById", + "parameters": [ + { + "description": "Target ID to Edit IoT IMSI Profile Plan By.", + "in": "path", + "example": "238094-4546-2323-5687879-234", + "name": "id", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/getAll-3" + } + } + } + }, + "responses": { + "200": { + "description": "Returns a Single IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": { + "id": "5ea242303962644b52fc4346", + "name": "Test", + "simType": "E-SIM", + "imsiTypeId": "5ea242303962644b52fc4346", + "shieldOnly": false, + "updatedBy": "ca8fd4aa-a509-43e5-aa32-8bd2926c9779", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + }, + "schema": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/components/schemas/get-3" + } + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + }, + "delete": { + "summary": "Delete Existing IoT IMSI Profile Plan", + "tags": ["Edge SIM"], + "description": "Delete Existing IoT IMSI Profile Plan based on ID.", + "operationId": "DeleteAdminPlanById", + "parameters": [ + { + "description": "Target ID to Delete IoT IMSI Profile Plan By.", + "in": "path", + "example": "238094-4546-2323-5687879-234", + "name": "id", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Removes a Single IoT IMSI Profile Plan." + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + } + }, + "/v2/admin/iot-imsi-profile/{id}/imsiType": { + "get": { + "summary": "Get All IoT IMSI Profile Plan Types by ID (Shield)", + "tags": ["Edge SIM"], + "description": "Get All IoT IMSI Profile Plan Types associated or belonging to IoT IMSI Profile Plan ID.", + "operationId": "GetPlanTypesListAdmin", + "parameters": [ + { + "description": "Target IoT IMSI Profile Plan ID.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns All IoT IMSI Profile Plan Types.", + "content": { + "application/json": { + "example": [ + { + "id": "5ea242303962644b52fc4346,", + "name": "string,", + "externalImsiProfileId": "string,", + "provider": "string,", + "inventoryId": "string,", + "subscriptionPackageType": "Error", + "subscriptionPackageTemplateId": "Error", + "subscriptionPackageTemplateDesc": "Error", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + } + ] + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + } + }, + "/v2/admin/iot-imsi-profile/update": { + "post": { + "summary": "Update all IoT IMSI Profile Plans by Filter", + "tags": ["Edge SIM"], + "description": "Update all IoT IMSI Profile Plans by Filter.", + "operationId": "UpdateBulkPlansByFilterAdmin", + "parameters": [ + { + "description": "Target Where Clause to check IoT IMSI Profile Plans By.", + "in": "query", + "example": "{\"apnAcl\":\"test\"}", + "name": "where", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get-2" + } + } + } + }, + "responses": { + "200": { + "description": "Returns a Count of Updated IoT IMSI Profile Plans.", + "content": { + "application/json": { + "example": { + "count": 0 + }, + "schema": { + "type": "object", + "properties": { + "count": { + "type": "number" + } + } + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plans.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + } + }, + "/v2/admin/iot-imsi-profile/{id}/apns": { + "get": { + "summary": "Get IoT APNs related to IoT IMSI Profile Plan by ID", + "tags": ["Edge SIM"], + "description": "Get all IoT APNs related to a IoT IMSI Profile Plan based on Plan ID.", + "operationId": "GetApnsPlanListByIdAdmin", + "parameters": [ + { + "description": "Target IoT IMSI Profile Plan ID.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + }, + { + "description": "Filter request as defined by filter criteria.", + "in": "query", + "example": "{ where: {\"friendlyName\":\"test\"}}", + "name": "filter", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns IoT APNs of a IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": [ + { + "id": "5ea242303962644b52fc4346", + "apn": "apn2", + "location": "london", + "friendlyName": "apn2", + "subnet": "1.1.1.1/12", + "ipAvailable": true, + "serviceType": "5ea242303962644b52fc4346", + "dbConnection": "string", + "apnAcl": "string", + "apnVrf": "string", + "router1": "0.0.0.0", + "router2": "0.0.0.0", + "priority": 1, + "createdByAgent": "agent", + "capacitySoftLimit": "number", + "capacityHardLimit": "number", + "firewallDevice": "string", + "adom": "adom", + "vdom": "vdom", + "notificationProvider": "standard", + "complianceProvider": "manual", + "billingProvider": "insight", + "simPoolProvider": "self", + "simProvider": "telna", + "subnetProvider": "demo", + "dnsProvider": "string", + "ipAllocatorProvider": "none", + "radiusProvider": "radius", + "firewallProvider": "mplsInterface", + "templateProvider": "custom", + "internetRouteTarget": "string", + "primaryDNS": "string", + "secondaryDNS": "boolean", + "apnVrfRt": "boolean", + "genericIp": "boolean", + "mplsInterface": "boolean", + "internetInterface": "boolean", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + } + ], + "schema": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/components/schemas/apn-get" + } + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + }, + "post": { + "summary": "Create New IoT APN using related to Plan ID", + "tags": ["Edge SIM"], + "description": "Create a New IoT APN related to the target IoT IMSI Profile Plan based on Plan ID.", + "operationId": "CreateApnByPlanIdAdmin", + "parameters": [ + { + "description": "Target IoT IMSI Profile Plan ID.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apn-get" + } + } + } + }, + "responses": { + "200": { + "description": "Returns a single IoT APN.", + "content": { + "application/json": { + "example": { + "apn": "apn2", + "location": "london", + "friendlyName": "5ea242303962644b52fc4346", + "subnet": "string", + "ipAvailable": false, + "serviceType": "5ea242303962644b52fc4346", + "dbConnection": "string", + "apnAcl": "string", + "apnVrf": "string", + "router1": "0.0.0.0", + "router2": "0.0.0.0", + "priority": 1, + "createdByAgent": "5ea242303962644b52fc4346", + "capacitySoftLimit": 2, + "capacityHardLimit": 2, + "firewallDevice": "string", + "adom": "string", + "vdom": "string", + "notificationProvider": "string", + "complianceProvider": "manual", + "billingProvider": "insight", + "simPoolProvider": "self", + "simProvider": "telna", + "subnetProvider": "demo", + "dnsProvider": "string", + "ipAllocatorProvider": "none", + "radiusProvider": "radius", + "firewallProvider": "mplsInterface", + "templateProvider": "custom", + "internetRouteTarget": "string", + "primaryDNS": "0.0.0.0", + "secondaryDNS": true, + "apnVrfRt": true, + "genericIp": true, + "mplsInterface": true, + "internetInterface": true, + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + } + } + } + }, + "400": { + "description": "Throws an error for an invalid IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": { + "properties": { + "error": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "statusCode": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + }, + "401": { + "description": "Throws an error for an unauthorized request.", + "content": { + "application/json": { + "example": { + "error": { + "statusCode": "401,", + "name": "Error", + "message": "IoT IMSI Plan: ID does not exist or Roles and Policies Missing: CompanyId does not have permission to use it." + } + } + } + } + } + } + }, + "delete": { + "summary": "Deletes All IoT APN using related to Plan ID", + "tags": ["Edge SIM"], + "description": "Deletes All IoT APN related to the target IoT IMSI Profile Plan based on Plan ID.", + "operationId": "DeleteApnByPlanIdAdmin", + "parameters": [ + { + "description": "Target IoT IMSI Profile Plan ID.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Returns Request was successful." + }, + "400": { + "description": "Throws an error for an invalid IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": { + "properties": { + "error": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "statusCode": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + }, + "401": { + "description": "Throws an error for an unauthorized request.", + "content": { + "application/json": { + "example": { + "error": { + "statusCode": "401,", + "name": "Error", + "message": "IoT IMSI Plan: ID does not exist or Roles and Policies Missing: CompanyId does not have permission to use it." + } + } + } + } + } + } + } + }, + "/v2/admin/iot-imsi-profile/{id}/apns/count": { + "get": { + "summary": "Get Count of IoT APNs by IMSI Plan ID (Shield)", + "tags": ["Edge SIM"], + "description": "Get Count of IoT APNs related to a IoT IMSI Profile Plan based on Plan ID.", + "operationId": "GetCountApnsByPlanIdAdmin", + "parameters": [ + { + "description": "Target IoT IMSI Profile Plan ID.", + "in": "path", + "name": "id", + "required": true, + "example": "5f97d3d2d85fbe0014fd1812", + "schema": { + "type": "string" + } + }, + { + "description": "Where string object containing keys and properties to filter by.", + "in": "query", + "example": "{\"apnAcl\":\"test\"}", + "name": "where", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns IoT APNs of a IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": { + "count": 10 + }, + "schema": { + "type": "object", + "properties": { + "count": { + "type": "number" + } + } + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + } + }, + "/v2/admin/iot-imsi-profile/findOne": { + "get": { + "summary": "Get Single IoT IMSI Profile Plan by Filter (Shield)", + "tags": ["Edge SIM"], + "description": "Find first instance of the model matched by filter from the data source.", + "operationId": "GetProfilePlanByFilterAdmin", + "parameters": [ + { + "description": "Filter request as defined by filter criteria.", + "in": "query", + "example": "{ fields: imsiType | [\"imsiType\"], include: imsiType | [\"imsiType\"], limit: 10, order: asc | desc, skip: 10, where: {\"id\":\"238094-4546-2323-5687879-234\"}}", + "name": "filter", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns an IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": { + "id": "string", + "name": "string", + "simType": "string", + "imsiTypeId": "string", + "shieldOnly": "boolean", + "created_at": "2024-08-13T09:38:50.268Z", + "updated_at": "2024-08-13T09:38:50.268Z", + "deleted_at": "2024-08-13T09:38:50.268Z" + }, + "schema": { + "type": "object", + "$ref": "#/components/schemas/get-2" + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + } + }, + "/v2/admin/iot-imsi-profile/{id}/exists": { + "get": { + "summary": "Check Existing IoT IMSI Profile Plan by ID", + "tags": ["Edge SIM"], + "description": "Find first instance of the model matched by filter from the data source.", + "operationId": "CheckPlanByFilterAdmin", + "parameters": [ + { + "description": "Target ID to check IoT IMSI Profile Plan By.", + "in": "path", + "example": "238094-4546-2323-5687879-234", + "name": "id", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns a Single IoT IMSI Profile Plan.", + "content": { + "application/json": { + "example": { + "exists": true + }, + "schema": { + "type": "object", + "properties": { + "exists": { + "type": "string" + } + } + } + } + } + }, + "401": { + "description": "Throws an error for not found IoT IMSI Profile Plan.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/not-valid" + } + } + } + } + } + } + }, + "/v1/cad/identity/signedCompany": { + "get": { + "tags": ["Anti-DDoS"], + "summary": "Retrieve signed company information based on the user's Insight reference ID", + "description": "This endpoint retrieves signed company information for a specific Insight ID provided by the identity API.", + "operationId": "GetSignedCompanyByInsightRefId", + "responses": { + "200": { + "description": "A successful response containing the signed company information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetSignedCompanyResponse" + } + } + } + }, + "404": { + "description": "The requested company information could not be found." + }, + "500": { + "description": "An internal server error occurred." + } + } + } + }, + "/mefApi/sonata/geographicAddressManagement/v7/geographicAddressValidation": { + "post": { + "description": "This operation creates a GeographicAddressValidation entity.", + "operationId": "createGeographicAddressValidation", + "parameters": [ + { + "description": "The unique identifier of the organization that is acting as the a Buyer. MUST be specified in the request only when the requester represents more than one Buyer.\nReference: MEF 79 (Sn 8.8)", + "in": "query", + "name": "buyerId", + "schema": { + "type": "string" + } + }, + { + "description": "The unique identifier of the organization that is acting as the Seller. MUST be specified in the request only when responding entity represents more than one Seller.\nReference: MEF 79 (Sn 8.8)", + "in": "query", + "name": "sellerId", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json;charset=utf-8": { + "examples": { + "request": { + "summary": "Full requestData data", + "value": { + "provideAlternative": true, + "submittedGeographicAddress": { + "@type": "FieldedAddress", + "country": "AU", + "city": "Sydney", + "streetName": "" + } + } + } + }, + "schema": { + "$ref": "#/components/schemas/GeographicAddressValidation_Create" + } + } + }, + "description": "The GeographicAddressValidation to be created", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json;charset=utf-8": { + "examples": { + "response": { + "summary": "Full response data", + "description": "### Notes:\naddress id will be used in quote\n\naddress keyName will be used in order", + "value": { + "validationResult": "partial", + "alternateGeographicAddress": [ + { + "id": "5a4d83cb7a0b6400125692cc", + "@type": "FieldedAddress", + "country": "AU", + "city": "Sydney", + "streetName": "Unit B 639 Gardeners Road Mascot", + "locality": "e7539c5fe66f9e4ce5b08ab7", + "geographicSubAddress": { + "buildingName": "Equinix IBX SY1 - AWS ONLY", + "subUnit": [ + { + "subUnitNumber": "equinix-ibx-sy1" + } + ] + } + }, + { + "id": "5db101aeb5d738000b67d1d0", + "@type": "FieldedAddress", + "country": "AU", + "city": "Sydney", + "locality": "e7539c5fe66f9e4ce5b08ab7", + "geographicSubAddress": { + "buildingName": "NEXTDC S1 Sydney", + "subUnit": [ + { + "subUnitNumber": "nextdc-s1-sydney" + } + ] + } + }, + { + "id": "5db678795d545c000bc69c87", + "@type": "FieldedAddress", + "country": "AU", + "city": "Sydney", + "locality": "5db678c45d545c000bc69c88", + "geographicSubAddress": { + "buildingName": "hkg39a- Oceania -APAC", + "subUnit": [ + { + "subUnitNumber": "hkg05a" + } + ] + } + } + ], + "provideAlternative": true, + "submittedGeographicAddress": { + "@type": "FieldedAddress", + "country": "AU", + "city": "Sydney", + "streetName": "" + } + } + } + }, + "schema": { + "$ref": "#/components/schemas/GeographicAddressValidation" + } + } + }, + "description": "OK. (https://tools.ietf.org/html/rfc7231#section-6.3.1)" + }, + "400": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error400" + } + } + }, + "description": "Bad Request" + }, + "401": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error401" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error403" + } + } + }, + "description": "Forbidden" + }, + "422": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "items": { + "$ref": "#/components/schemas/Error422" + }, + "type": "array" + } + } + }, + "description": "Unprocessable entity due to the business validation problems" + }, + "500": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error500" + } + } + }, + "description": "Internal Server Error" + } + }, + "summary": "Creates a GeographicAddressValidation", + "tags": ["Geographic Address Management"], + "security": [ + { + "x-sonata-buyer-key-and-api-key": [] + } + ], + "x-codegen-request-body-name": "geographicAddressValidation" + } + }, + "/mefApi/sonata/geographicAddressManagement/v7/geographicAddress/{id}": { + "get": { + "description": "This operation retrieves a GeographicAddress entity.", + "operationId": "retrieveGeographicAddress", + "parameters": [ + { + "description": "Identifier of the GeographicAddress", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The unique identifier of the organization that is acting as the a Buyer. MUST be specified in the request only when the requester represents more than one Buyer.\nReference: MEF 79 (Sn 8.8)", + "in": "query", + "name": "buyerId", + "schema": { + "type": "string" + } + }, + { + "description": "The unique identifier of the organization that is acting as the Seller. MUST be specified in the request only when responding entity represents more than one Seller.\nReference: MEF 79 (Sn 8.8)", + "in": "query", + "name": "sellerId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json;charset=utf-8": { + "examples": { + "response": { + "summary": "Full response data", + "value": { + "id": "5a4d83cb7a0b6400125692cc", + "@type": "FieldedAddress", + "country": "AU", + "city": "Sydney", + "streetName": "Unit B 639 Gardeners Road Mascot", + "locality": "e7539c5fe66f9e4ce5b08ab7", + "geographicSubAddress": { + "subUnit": [ + { + "subUnitNumber": "equinix-ibx-sy1" + } + ] + } + } + } + }, + "schema": { + "$ref": "#/components/schemas/GeographicAddress" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error400" + } + } + }, + "description": "Bad Request" + }, + "401": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error401" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error403" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error404" + } + } + }, + "description": "Not Found" + }, + "500": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error500" + } + } + }, + "description": "Internal Server Error" + } + }, + "summary": "Retrieves a GeographicAddress by ID", + "tags": ["Geographic Address Management"], + "security": [ + { + "x-sonata-buyer-key-and-api-key": [] + } + ] + } + }, + "/mefApi/sonata/productOrderingManagement/v10/productOrder": { + "post": { + "description": "This operation creates a ProductOrder entity.", + "operationId": "createProductOrder", + "parameters": [ + { + "description": "The unique identifier of the organization that is acting as the a Buyer. MUST be specified in the request only when the requester represents more than one Buyer.\nReference: MEF 79 (Sn 8.8)", + "in": "query", + "name": "buyerId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "The unique identifier of the organization that is acting as the Seller. MUST be specified in the request only when the responding entity represents more than one Seller.\nReference: MEF 79 (Sn 8.8)", + "in": "query", + "name": "sellerId", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/ProductOrder_Create" + }, + "examples": { + "UNI-ADD-Order": { + "summary": "UNI Add Order", + "value": { + "note": [], + "relatedContactInformation": [ + { + "number": "111 222 333", + "emailAddress": "productOrderContact@example.com", + "role": "productOrderContact", + "postalAddress": null, + "organization": "MEF", + "name": "Joe Order", + "numberExtension": null + } + ], + "externalId": "AEL[9301] General On-net Order ", + "projectId": "MEF OIT", + "productOrderItem": [ + { + "relatedBuyerPON": null, + "note": [], + "product": { + "productOffering": { + "href": null, + "id": "UNI" + }, + "productConfiguration": { + "@type": "UNI", + "bandwidth": 1000, + "bandwidthUnit": "MBPS", + "name": "test-qc01", + "paymentType": "invoice", + "dcfName": "qe-dcf-1" + }, + "productRelationship": [], + "id": null, + "href": null, + "place": [ + { + "role": "INSTALL_LOCATION", + "href": null, + "id": "6356792a4806220015488631", + "@type": "GeographicAddressRef", + "@schemaLocation": null + } + ] + }, + "relatedContactInformation": [ + { + "number": "+12-345-678-90", + "emailAddress": "Buyer.ProductOrderItemContact@example.com", + "role": "buyerProductOrderItemContact", + "postalAddress": null, + "organization": null, + "name": "Buyer Product Order Item Contact", + "numberExtension": null + }, + { + "number": "+12-345-678-90", + "emailAddress": "Buyer.ImplementationContact@example.com", + "role": "buyerImplementationContact", + "postalAddress": null, + "organization": null, + "name": "Buyer Implementation Contact", + "numberExtension": null + }, + { + "number": "+12-345-678-90", + "emailAddress": "Buyer.TechnicalContact@example.com", + "role": "buyerTechnicalContact", + "postalAddress": null, + "organization": null, + "name": "Buyer Technical Contact ", + "numberExtension": null + }, + { + "number": "+12-345-678-90", + "emailAddress": "Buyer.ItemServiceSiteContact@example.com", + "role": "orderItemServiceSiteContact", + "postalAddress": null, + "organization": null, + "name": "Buyer Technical Contact ", + "numberExtension": null + } + ], + "requestedItemTerm": { + "name": "UNI Item Term", + "duration": { + "amount": 1, + "units": "calendarMonths" + }, + "endOfTermAction": "roll", + "description": "no description", + "rollInterval": { + "amount": 1, + "units": "calendarMonths" + } + }, + "billingAccount": { + "id": "001" + }, + "productOrderItemRelationship": [], + "tspRestorationPriority": null, + "coordinatedAction": [], + "action": "add", + "quoteItem": { + "quoteHref": null, + "id": "UNI", + "quoteId": "null" + }, + "endCustomerName": null, + "expediteIndicator": false, + "id": "UNI" + } + ] + } + }, + "Eline-ADD-Order": { + "summary": "Eline Add Order", + "value": { + "note": [], + "relatedContactInformation": [ + { + "number": "111 222 333", + "emailAddress": "productOrderContact@example.com", + "role": "productOrderContact", + "postalAddress": null, + "organization": "MEF", + "name": "Joe Order", + "numberExtension": null + } + ], + "externalId": "AEL[9202] General On-net Order ", + "projectId": "MEF OIT", + "productOrderItem": [ + { + "relatedBuyerPON": null, + "note": [], + "product": { + "productOffering": { + "href": null, + "id": "ACCESS_E_LINE" + }, + "productConfiguration": { + "@type": "ACCESS_E_LINE", + "bandwidth": 100, + "bandwidthUnit": "MBPS", + "classOfService": "SILVER", + "paymentType": "invoice", + "name": "Qe 1 Company Connection 0904", + "buyerCompanyId": "qe1company", + "destUNIMetroId": "5db65dcf5d545c000bc6884b", + "type": "LAYER2" + }, + "productRelationship": [ + { + "relationshipType": "CONNECTS_TO_ENNI", + "id": "6371e5fa2fb2fa00155a3535", + "href": null + }, + { + "relationshipType": "CONNECTS_TO_UNI", + "id": "63634cbf11ffdd00151fc6fb", + "href": null + } + ], + "id": null, + "href": null, + "place": [ + { + "role": "INSTALL_LOCATION", + "href": null, + "id": "6360d0915064cc00157f7984", + "@type": "GeographicAddressRef", + "@schemaLocation": null + }, + { + "role": "INSTALL_LOCATION", + "href": null, + "id": "6356792a4806220015488631", + "@type": "GeographicAddressRef", + "@schemaLocation": null + } + ] + }, + "relatedContactInformation": [ + { + "number": "+12-345-678-90", + "emailAddress": "Buyer.ProductOrderItemContact@example.com", + "role": "buyerProductOrderItemContact", + "postalAddress": null, + "organization": null, + "name": "Buyer Product Order Item Contact", + "numberExtension": null + }, + { + "number": "+12-345-678-90", + "emailAddress": "Buyer.ImplementationContact@example.com", + "role": "buyerImplementationContact", + "postalAddress": null, + "organization": null, + "name": "Buyer Implementation Contact", + "numberExtension": null + }, + { + "number": "+12-345-678-90", + "emailAddress": "Buyer.TechnicalContact@example.com", + "role": "buyerTechnicalContact", + "postalAddress": null, + "organization": null, + "name": "Buyer Technical Contact ", + "numberExtension": null + } + ], + "requestedItemTerm": { + "name": "ELine Item Term", + "duration": { + "amount": 3, + "units": "calendarYears" + }, + "endOfTermAction": "roll", + "description": "no description", + "rollInterval": { + "amount": 1, + "units": "calendarMonths" + } + }, + "billingAccount": { + "id": "001" + }, + "productOrderItemRelationship": [], + "tspRestorationPriority": null, + "productOfferingQualificationItem": { + "productOfferingQualificationId": "", + "alternateProductProposalId": null, + "productOfferingQualificationHref": null, + "id": "ELINE" + }, + "coordinatedAction": [], + "action": "add", + "quoteItem": { + "quoteHref": null, + "id": "ELINE", + "quoteId": "null" + }, + "endCustomerName": null, + "expediteIndicator": true, + "expediteValue": 1, + "id": "ELINE", + "requestedCompletionDate": "2121-11-30T23:00:00Z" + } + ] + } + }, + "UNI-Delete-Order": { + "summary": "UNI Delete Order", + "value": { + "note": [], + "relatedContactInformation": [ + { + "number": "111 222 333", + "emailAddress": "productOrderContact@example.com", + "role": "productOrderContact", + "postalAddress": null, + "organization": "MEF", + "name": "Joe Order", + "numberExtension": null + } + ], + "externalId": "AEL[9401] General On-net Order - Disconnect", + "projectId": "MEF OIT", + "productOrderItem": [ + { + "product": { + "id": "6840040154392a0ac9eb8d3d" + }, + "action": "delete", + "id": "UNI" + } + ] + } + }, + "Eline-Delete-Order": { + "summary": "Eline Delete Order", + "value": { + "note": [], + "relatedContactInformation": [ + { + "number": "111 222 333", + "emailAddress": "productOrderContact@example.com", + "role": "productOrderContact", + "postalAddress": null, + "organization": "MEF", + "name": "Joe Order", + "numberExtension": null + } + ], + "externalId": "AEL[9401] General On-net Order - Disconnect", + "projectId": "MEF OIT", + "productOrderItem": [ + { + "product": { + "id": "66deb1e53f3deac55d770ff4" + }, + "action": "delete", + "id": "ACCESS_E_LINE" + } + ] + } + } + } + } + }, + "description": "The ProductOrder to be created", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/ProductOrder" + }, + "examples": { + "UNI-ADD-Order": { + "summary": "UNI Add Order", + "value": { + "relatedContactInformation": [ + { + "number": "111 222 333", + "emailAddress": "productOrderContact@example.com", + "role": "productOrderContact", + "organization": "MEF", + "name": "Joe Order" + }, + { + "number": "00852-64167859", + "emailAddress": "OrderSeller@example.com", + "role": "sellerContact", + "name": "consoleconnect" + } + ], + "id": "810ad4fa-b799-4698-8c27-6debee22b794", + "orderDate": "2025-06-09 09:56:02", + "productOrderItem": [ + { + "action": "add", + "billingAccount": { + "id": "001" + }, + "coordinatedAction": [], + "expediteIndicator": false, + "id": "UNI", + "note": [], + "product": { + "productOffering": { + "id": "UNI" + }, + "productConfiguration": { + "@type": "UNI", + "bandwidth": 1000, + "bandwidthUnit": "MBPS", + "name": "test-qc01", + "paymentType": "invoice", + "dcfName": "qe-dcf-1" + }, + "productRelationship": [], + "place": [ + { + "role": "INSTALL_LOCATION", + "id": "6356792a4806220015488631", + "@type": "GeographicAddressRef" + } + ] + }, + "itemTerm": { + "duration": { + "amount": "1", + "units": "calendarMonths" + }, + "endOfTermAction": "roll", + "rollInterval": { + "amount": "1", + "units": "calendarMonths" + }, + "name": "calendarMonths" + }, + "productOrderItemRelationship": [], + "quoteItem": { + "id": "UNI", + "quoteId": "null" + }, + "relatedContactInformation": [ + { + "number": "+12-345-678-90", + "emailAddress": "Buyer.ProductOrderItemContact@example.com", + "role": "buyerProductOrderItemContact", + "name": "Buyer Product Order Item Contact" + }, + { + "number": "+12-345-678-90", + "emailAddress": "Buyer.ImplementationContact@example.com", + "role": "buyerImplementationContact", + "name": "Buyer Implementation Contact" + }, + { + "number": "+12-345-678-90", + "emailAddress": "Buyer.TechnicalContact@example.com", + "role": "buyerTechnicalContact", + "name": "Buyer Technical Contact " + }, + { + "number": "+12-345-678-90", + "emailAddress": "Buyer.ItemServiceSiteContact@example.com", + "role": "orderItemServiceSiteContact", + "name": "Buyer Technical Contact " + } + ], + "requestedItemTerm": { + "name": "UNI Item Term", + "duration": { + "amount": 1, + "units": "calendarMonths" + }, + "endOfTermAction": "roll", + "description": "no description", + "rollInterval": { + "amount": 1, + "units": "calendarMonths" + } + }, + "expediteAcceptedIndicator": false, + "state": "acknowledged" + } + ], + "state": "acknowledged", + "orderId": "6846afb4dc922aac0ca656aa" + } + }, + "Eline-ADD-Order": { + "summary": "Eline Add Order", + "value": { + "relatedContactInformation": [ + { + "number": "111 222 333", + "emailAddress": "productOrderContact@example.com", + "role": "productOrderContact", + "organization": "MEF", + "name": "Joe Order" + }, + { + "number": "00852-64167859", + "emailAddress": "OrderSeller@example.com", + "role": "sellerContact", + "name": "consoleconnect" + } + ], + "id": "90d124f3-075b-4b8c-b07e-13d1e921f3c3", + "orderDate": "2025-06-05 10:09:58", + "productOrderItem": [ + { + "action": "add", + "billingAccount": { + "id": "001" + }, + "coordinatedAction": [], + "expediteIndicator": true, + "id": "ELINE", + "expectedCompletionDate": "2121-11-30T23:00:00Z", + "note": [], + "product": { + "productOffering": { + "id": "ACCESS_E_LINE" + }, + "productConfiguration": { + "@type": "ACCESS_E_LINE", + "bandwidth": 100, + "bandwidthUnit": "MBPS", + "classOfService": "SILVER", + "paymentType": "invoice", + "name": "Qe 1 Company Connection 0904", + "buyerCompanyId": "qe1company", + "destUNIMetroId": "5db65dcf5d545c000bc6884b", + "type": "LAYER2" + }, + "productRelationship": [ + { + "relationshipType": "CONNECTS_TO_ENNI", + "id": "6371e5fa2fb2fa00155a3535" + }, + { + "relationshipType": "CONNECTS_TO_UNI", + "id": "63634cbf11ffdd00151fc6fb" + } + ], + "place": [ + { + "role": "INSTALL_LOCATION", + "id": "6360d0915064cc00157f7984", + "@type": "GeographicAddressRef" + }, + { + "role": "INSTALL_LOCATION", + "id": "6356792a4806220015488631", + "@type": "GeographicAddressRef" + } + ] + }, + "itemTerm": { + "duration": { + "amount": 3, + "units": "calendarYears" + }, + "endOfTermAction": "roll", + "rollInterval": { + "amount": "1", + "units": "calendarMonths" + }, + "name": "itemTerm" + }, + "productOfferingQualificationItem": { + "productOfferingQualificationId": "", + "id": "ELINE" + }, + "productOrderItemRelationship": [], + "quoteItem": { + "id": "ELINE", + "quoteId": "null" + }, + "relatedContactInformation": [ + { + "number": "+12-345-678-90", + "emailAddress": "Buyer.ProductOrderItemContact@example.com", + "role": "buyerProductOrderItemContact", + "name": "Buyer Product Order Item Contact" + }, + { + "number": "+12-345-678-90", + "emailAddress": "Buyer.ImplementationContact@example.com", + "role": "buyerImplementationContact", + "name": "Buyer Implementation Contact" + }, + { + "number": "+12-345-678-90", + "emailAddress": "Buyer.TechnicalContact@example.com", + "role": "buyerTechnicalContact", + "name": "Buyer Technical Contact " + } + ], + "requestedCompletionDate": "2121-11-30T23:00:00Z", + "requestedItemTerm": { + "name": "ELine Item Term", + "duration": { + "amount": 3, + "units": "calendarYears" + }, + "endOfTermAction": "roll", + "description": "no description", + "rollInterval": { + "amount": 1, + "units": "calendarMonths" + } + }, + "expediteAcceptedIndicator": true, + "state": "acknowledged" + } + ], + "state": "acknowledged", + "orderId": "68416cf7f0e53fcd55d62bdd", + "instanceId": "68416cf7f0e53fcd55d62bdd" + } + }, + "UNI-Delete-Order": { + "summary": "UNI Delete Order", + "value": { + "id": "147a08c6-063a-461f-b031-d288a9494215", + "relatedContactInformation": [ + { + "number": "111 222 333", + "emailAddress": "productOrderContact@example.com", + "role": "productOrderContact", + "organization": "MEF", + "name": "Joe Order" + }, + { + "number": "111222333", + "emailAddress": "orderseller@example.com", + "role": "sellerContact", + "name": "OrderSeller" + } + ], + "productOrderItem": [ + { + "product": { + "id": "6840040154392a0ac9eb8d3d" + }, + "action": "delete", + "id": "UNI" + } + ], + "orderDate": "2025-04-14 09:03:16", + "state": "acknowledged", + "orderId": "67f603c137f30bd98d557d7b" + } + }, + "Eline-Delete-Order": { + "summary": "Eline Delete Order", + "value": { + "id": "bda17fb0-5298-42b3-91eb-3b263df7d47a", + "relatedContactInformation": [ + { + "number": "111 222 333", + "emailAddress": "productOrderContact@example.com", + "role": "productOrderContact", + "organization": "MEF", + "name": "Joe Order" + }, + { + "number": "111222333", + "emailAddress": "orderseller@example.com", + "role": "sellerContact", + "name": "OrderSeller" + } + ], + "productOrderItem": [ + { + "product": { + "id": "66deb1e53f3deac55d770ff4" + }, + "action": "delete", + "id": "ACCESS_E_LINE" + } + ], + "state": "acknowledged", + "orderId": "66deb1e53f3deac55d770ff4" + } + } + } + } + }, + "description": "Created (https://tools.ietf.org/html/rfc7231#section-6.3.2)" + }, + "400": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error400" + } + } + }, + "description": "Bad Request" + }, + "401": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error401" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error403" + } + } + }, + "description": "Forbidden" + }, + "422": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Error422" + } + } + } + }, + "description": "Unprocessable entity due to the business validation problems" + }, + "500": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error500" + } + } + }, + "description": "Internal Server Error" + } + }, + "summary": "Creates a ProductOrder", + "tags": ["Product Order Management"], + "security": [ + { + "x-sonata-buyer-key-and-api-key": [] + } + ], + "x-codegen-request-body-name": "productOrder" + } + }, + "/mefApi/sonata/productOrderingManagement/v10/productOrder/{id}": { + "get": { + "description": "This operation retrieves a ProductOrder entity.", + "operationId": "retrieveProductOrder", + "parameters": [ + { + "description": "Identifier of the ProductOrder", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The unique identifier of the organization that is acting as the a Buyer. MUST be specified in the request only when the requester represents more than one Buyer.\nReference: MEF 79 (Sn 8.8)", + "in": "query", + "name": "buyerId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "The unique identifier of the organization that is acting as the Seller. MUST be specified in the request only when responding entity represents more than one Seller.\nReference: MEF 79 (Sn 8.8)", + "in": "query", + "name": "sellerId", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/ProductOrder" + }, + "examples": { + "UNI-ADD-Order": { + "summary": "UNI Add Order", + "value": { + "id": "810ad4fa-b799-4698-8c27-6debee22b794", + "relatedContactInformation": [ + { + "name": "Joe Order", + "role": "productOrderContact", + "number": "111 222 333", + "emailAddress": "productOrderContact@example.com", + "organization": "MEF" + }, + { + "number": "00852-64167859", + "emailAddress": "OrderSeller@example.com", + "role": "sellerContact", + "name": "consoleconnect" + } + ], + "productOrderItem": [ + { + "action": "add", + "billingAccount": { + "id": "001" + }, + "coordinatedAction": [], + "expediteIndicator": false, + "id": "UNI", + "expectedCompletionDate": "2025-06-09T09:56:16.260Z", + "note": [], + "product": { + "productOffering": { + "id": "UNI" + }, + "productConfiguration": { + "name": "test-qc01", + "@type": "UNI", + "dcfName": "qe-dcf-1", + "bandwidth": 1000, + "paymentType": "invoice", + "bandwidthUnit": "MBPS" + }, + "productRelationship": [], + "place": [ + { + "id": "6356792a4806220015488631", + "role": "INSTALL_LOCATION", + "@type": "GeographicAddressRef" + } + ] + }, + "productOrderItemRelationship": [], + "quoteItem": { + "id": "UNI", + "quoteId": "null" + }, + "relatedContactInformation": [ + { + "name": "Buyer Product Order Item Contact", + "role": "buyerProductOrderItemContact", + "number": "+12-345-678-90", + "emailAddress": "Buyer.ProductOrderItemContact@example.com" + }, + { + "name": "Buyer Implementation Contact", + "role": "buyerImplementationContact", + "number": "+12-345-678-90", + "emailAddress": "Buyer.ImplementationContact@example.com" + }, + { + "name": "Buyer Technical Contact ", + "role": "buyerTechnicalContact", + "number": "+12-345-678-90", + "emailAddress": "Buyer.TechnicalContact@example.com" + }, + { + "name": "Buyer Technical Contact ", + "role": "orderItemServiceSiteContact", + "number": "+12-345-678-90", + "emailAddress": "Buyer.ItemServiceSiteContact@example.com" + } + ], + "requestedItemTerm": { + "name": "UNI Item Term", + "duration": { + "units": "calendarMonths", + "amount": 1 + }, + "description": "no description", + "rollInterval": { + "units": "calendarMonths", + "amount": 1 + }, + "endOfTermAction": "roll" + }, + "expediteAcceptedIndicator": false, + "itemTerm": { + "name": "calendarMonths", + "duration": { + "units": "calendarMonths", + "amount": "1" + }, + "rollInterval": { + "units": "calendarMonths", + "amount": "1" + }, + "endOfTermAction": "roll" + }, + "state": "inProgress", + "stateChange": [ + { + "state": "inProgress", + "changeDate": "2025-06-09T09:56:16.260Z" + } + ] + } + ], + "orderDate": "2025-06-09 09:56:02", + "state": "inProgress", + "orderId": "6846afb4dc922aac0ca656aa", + "instanceId": "" + } + }, + "Eline-ADD-Order": { + "summary": "Eline Add Order", + "value": { + "id": "90d124f3-075b-4b8c-b07e-13d1e921f3c3", + "relatedContactInformation": [ + { + "name": "Joe Order", + "role": "productOrderContact", + "number": "111 222 333", + "emailAddress": "productOrderContact@example.com", + "organization": "MEF" + }, + { + "number": "111222333", + "emailAddress": "orderseller@example.com", + "role": "sellerContact", + "name": "OrderSeller" + } + ], + "productOrderItem": [ + { + "action": "add", + "billingAccount": { + "id": "001" + }, + "coordinatedAction": [], + "expediteIndicator": true, + "id": "ELINE", + "expectedCompletionDate": "2025-05-29T03:37:02.249Z", + "note": [], + "product": { + "productOffering": { + "id": "ACCESS_E_LINE" + }, + "productConfiguration": { + "name": "Qe 1 Company Connection 0904", + "type": "LAYER2", + "@type": "ACCESS_E_LINE", + "bandwidth": 1, + "paymentType": "invoice", + "bandwidthUnit": "MBPS", + "buyerCompanyId": "qe1company", + "classOfService": "SILVER", + "destUNIMetroId": "5db65dcf5d545c000bc6884b" + }, + "productRelationship": [ + { + "id": "6371e5fa2fb2fa00155a3535", + "relationshipType": "CONNECTS_TO_ENNI" + }, + { + "id": "63634cbf11ffdd00151fc6fb", + "relationshipType": "CONNECTS_TO_UNI" + } + ], + "place": [ + { + "id": "6360d0915064cc00157f7984", + "role": "INSTALL_LOCATION", + "@type": "GeographicAddressRef" + }, + { + "id": "6356792a4806220015488631", + "role": "INSTALL_LOCATION", + "@type": "GeographicAddressRef" + } + ], + "id": "6837d65a65f1e1436a5762d4" + }, + "productOfferingQualificationItem": { + "id": "ELINE", + "productOfferingQualificationId": "" + }, + "productOrderItemRelationship": [], + "quoteItem": { + "id": "ELINE", + "quoteId": "null" + }, + "relatedContactInformation": [ + { + "name": "Buyer Product Order Item Contact", + "role": "buyerProductOrderItemContact", + "number": "+12-345-678-90", + "emailAddress": "Buyer.ProductOrderItemContact@example.com" + }, + { + "name": "Buyer Implementation Contact", + "role": "buyerImplementationContact", + "number": "+12-345-678-90", + "emailAddress": "Buyer.ImplementationContact@example.com" + }, + { + "name": "Buyer Technical Contact ", + "role": "buyerTechnicalContact", + "number": "+12-345-678-90", + "emailAddress": "Buyer.TechnicalContact@example.com" + } + ], + "requestedCompletionDate": "2121-11-30T23:00:00Z", + "requestedItemTerm": { + "name": "ELine Item Term", + "duration": { + "units": "calendarMonths", + "amount": 1 + }, + "description": "no description", + "rollInterval": { + "units": "calendarMonths", + "amount": 1 + }, + "endOfTermAction": "roll" + }, + "expediteAcceptedIndicator": true, + "itemTerm": { + "name": "calendarMonths", + "duration": { + "units": "calendarMonths", + "amount": 1 + }, + "rollInterval": { + "units": "calendarMonths", + "amount": "1" + }, + "endOfTermAction": "roll" + }, + "state": "inProgress", + "stateChange": [ + { + "state": "inProgress", + "changeDate": "2025-05-29T03:37:02.249Z" + } + ] + } + ], + "orderDate": "2025-05-29 03:36:57", + "state": "inProgress", + "orderId": "6837d65a65f1e1436a5762d4", + "instanceId": "" + } + } + } + } + }, + "description": "OK. (https://tools.ietf.org/html/rfc7231#section-6.3.1)" + }, + "400": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error400" + } + } + }, + "description": "Bad Request" + }, + "401": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error401" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error403" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error404" + } + } + }, + "description": "Not Found" + }, + "500": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error500" + } + } + }, + "description": "Internal Server Error" + } + }, + "summary": "Retrieves a ProductOrder by ID", + "tags": ["Product Order Management"], + "security": [ + { + "x-sonata-buyer-key-and-api-key": [] + } + ] + } + }, + "/mefApi/sonata/quoteManagement/v8/quote": { + "post": { + "description": "This operation creates a Quote entity.", + "operationId": "createQuote", + "parameters": [ + { + "description": "The unique identifier of the organization that is acting as the a Buyer. MUST be specified in the request only when the requester represents more than one Buyer.\nReference: MEF 79 (Sn 8.8)", + "in": "query", + "name": "buyerId", + "schema": { + "type": "string" + } + }, + { + "description": "The unique identifier of the organization that is acting as the Seller. MUST be specified in the request only when the responding entity\n represents more than one Seller.\n\nReference: MEF 79 (Sn 8.8)", + "in": "query", + "name": "sellerId", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Quote_Create" + }, + "examples": { + "UNI-Quote": { + "summary": "UNI Quote", + "value": { + "note": [], + "relatedContactInformation": [ + { + "number": "111 222 333", + "emailAddress": "buyerContact@example.com", + "role": "buyerContactInformation", + "postalAddress": null, + "organization": "MEF", + "name": "Joe Buyer", + "numberExtension": null + } + ], + "externalId": "AEL[8202] Sync Quote FIRM - ADD", + "buyerRequestedQuoteLevel": "firm", + "projectId": "MEF OIT", + "instantSyncQuote": true, + "quoteItem": [ + { + "requestedQuoteItemTerm": { + "name": "UNI Item Term", + "duration": { + "amount": 1, + "units": "calendarYears" + }, + "endOfTermAction": "roll", + "description": "no description", + "rollInterval": { + "amount": 1, + "units": "calendarMonths" + } + }, + "note": [], + "product": { + "id": null, + "href": null, + "place": [ + { + "role": "INSTALL_LOCATION", + "href": null, + "id": "6356792a4806220015488631", + "@type": "GeographicAddressRef", + "@schemaLocation": null + } + ], + "productConfiguration": { + "@type": "UNI", + "bandwidth": 1000, + "bandwidthUnit": "MBPS", + "name": "test-qc01", + "paymentType": "invoice", + "dcfName": "qe-dcf-1" + }, + "productOffering": { + "id": "UNI", + "href": null + }, + "productRelationship": [] + }, + "relatedContactInformation": [ + { + "number": "111 222 333", + "emailAddress": "quoteItemTechnicalContact@example.com", + "role": "quoteItemTechnicalContact", + "postalAddress": null, + "organization": "MEF", + "name": "David Item", + "numberExtension": null + }, + { + "number": "111 222 333", + "emailAddress": "quoteItemLocationContact@example.com", + "role": "quoteItemLocationContact", + "postalAddress": null, + "organization": "MEF", + "name": "Konrad Item Location", + "numberExtension": null + } + ], + "agreementName": null, + "action": "add", + "dealReference": null, + "id": "UNI", + "quoteItemRelationship": [] + } + ] + } + }, + "Eline-Quote": { + "summary": "Eline Quote", + "value": { + "note": [], + "requestedQuoteCompletionDate": "2027-12-31T23:00:00Z", + "relatedContactInformation": [ + { + "number": "111 222 333", + "emailAddress": "buyerContact@example.com", + "role": "buyerContactInformation", + "postalAddress": null, + "organization": "MEF", + "name": "Joe Buyer", + "numberExtension": null + } + ], + "externalId": "AEL[8202] Sync Quote FIRM - ADD", + "buyerRequestedQuoteLevel": "firm", + "projectId": "MEF OIT", + "instantSyncQuote": true, + "quoteItem": [ + { + "requestedQuoteItemTerm": { + "name": "ELine Item Term", + "duration": { + "amount": 3, + "units": "calendarMonths" + }, + "endOfTermAction": "roll", + "description": "no description", + "rollInterval": { + "amount": 1, + "units": "calendarMonths" + } + }, + "note": [], + "product": { + "id": null, + "href": null, + "place": [ + { + "role": "INSTALL_LOCATION", + "href": null, + "id": "6360d0915064cc00157f7984", + "@type": "GeographicAddressRef", + "@schemaLocation": null + }, + { + "role": "INSTALL_LOCATION", + "href": null, + "id": "6356792a4806220015488631", + "@type": "GeographicAddressRef", + "@schemaLocation": null + } + ], + "productConfiguration": { + "@type": "ACCESS_E_LINE", + "bandwidth": 100, + "bandwidthUnit": "MBPS", + "classOfService": "SILVER", + "paymentType": "invoice", + "name": "Qe 1 Company Connection 0904", + "buyerCompanyId": "qe1company", + "destUNIMetroId": "5db65dcf5d545c000bc6884b", + "type": "LAYER2" + }, + "productOffering": { + "id": "ACCESS_E_LINE", + "href": null + }, + "productRelationship": [ + { + "relationshipType": "CONNECTS_TO_ENNI", + "id": "6371e5fa2fb2fa00155a3535", + "href": null, + "groupingKey": null + }, + { + "relationshipType": "CONNECTS_TO_UNI", + "id": "63634cbf11ffdd00151fc6fb", + "href": null + } + ] + }, + "productOfferingQualificationItem": { + "productOfferingQualificationId": "", + "alternateProductProposalId": null, + "productOfferingQualificationHref": null, + "id": "ELINE" + }, + "relatedContactInformation": [ + { + "number": "111 222 333", + "emailAddress": "quoteItemTechnicalContact@example.com", + "role": "quoteItemTechnicalContact", + "postalAddress": null, + "organization": "MEF", + "name": "David Item", + "numberExtension": null + } + ], + "agreementName": null, + "action": "add", + "dealReference": null, + "id": "ELINE", + "quoteItemRelationship": [], + "quoteItemTerm": "" + } + ] + } + } + } + } + }, + "description": "The Quote to be created", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Quote" + }, + "examples": { + "UNI-Quote": { + "summary": "UNI Quote", + "value": { + "id": "ea265855-8225-4c7c-8489-a03a2c6c5d41", + "buyerRequestedQuoteLevel": "firm", + "relatedContactInformation": [ + { + "number": "111 222 333", + "emailAddress": "buyerContact@example.com", + "role": "buyerContactInformation", + "organization": "MEF", + "name": "Joe Buyer" + }, + { + "number": "00852-64197859", + "emailAddress": "QuoteSeller@example.com", + "role": "sellerContactInformation", + "name": "consoleconnect" + } + ], + "quoteItem": [ + { + "requestedQuoteItemTerm": { + "name": "UNI Item Term", + "duration": { + "amount": 1, + "units": "calendarYears" + }, + "endOfTermAction": "roll", + "description": "no description", + "rollInterval": { + "amount": 1, + "units": "calendarMonths" + } + }, + "product": { + "place": [ + { + "role": "INSTALL_LOCATION", + "id": "6356792a4806220015488631", + "@type": "GeographicAddressRef" + } + ], + "productConfiguration": { + "@type": "UNI", + "bandwidth": 1000, + "bandwidthUnit": "MBPS", + "name": "test-qc01", + "paymentType": "invoice", + "dcfName": "qe-dcf-1" + }, + "productOffering": { + "id": "UNI" + }, + "productRelationship": [] + }, + "action": "add", + "id": "UNI", + "subjectToFeasibilityCheck": false, + "quoteItemInstallationInterval": { + "amount": 1, + "units": "calendarMonths" + }, + "state": "approved.orderable", + "quoteItemTerm": [ + { + "name": "UNI Item Term", + "duration": { + "amount": 1, + "units": "calendarYears" + }, + "endOfTermAction": "roll", + "description": "no description", + "rollInterval": { + "amount": 1, + "units": "calendarMonths" + } + } + ], + "quoteItemPrice": [ + { + "unitOfMeasure": "", + "price": { + "dutyFreeAmount": { + "unit": "USD", + "value": 300 + }, + "taxRate": "", + "taxIncludedAmount": { + "unit": "", + "value": "" + } + }, + "name": "", + "priceType": "recurring", + "description": "", + "recurringChargePeriod": "month" + } + ] + } + ], + "quoteDate": "2025-06-09 09:46:51", + "externalId": "AEL[8202] Sync Quote FIRM - ADD", + "instantSyncQuote": true, + "requestedQuoteCompletionDate": "", + "effectiveQuoteCompletionDate": "2025-06-09 09:46:51", + "validFor": { + "startDateTime": "2025-06-09 09:46:51", + "endDateTime": "2025-06-10 09:46:51" + }, + "quoteLevel": "firm", + "state": "approved.orderable" + } + }, + "Eline-Quote": { + "summary": "Eline Quote", + "value": { + "id": "1739b286-114c-4cb3-941c-8c7b9a08ca5c", + "buyerRequestedQuoteLevel": "firm", + "relatedContactInformation": [ + { + "number": "111 222 333", + "emailAddress": "buyerContact@example.com", + "role": "buyerContactInformation", + "organization": "MEF", + "name": "Joe Buyer" + }, + { + "number": "00852-64197859", + "emailAddress": "QuoteSeller@example.com", + "role": "sellerContactInformation", + "name": "consoleconnect" + } + ], + "quoteItem": [ + { + "requestedQuoteItemTerm": { + "name": "ELine Item Term", + "duration": { + "amount": 3, + "units": "calendarMonths" + }, + "endOfTermAction": "roll", + "description": "no description", + "rollInterval": { + "amount": 1, + "units": "calendarMonths" + } + }, + "product": { + "place": [ + { + "role": "INSTALL_LOCATION", + "id": "6360d0915064cc00157f7984", + "@type": "GeographicAddressRef" + }, + { + "role": "INSTALL_LOCATION", + "id": "6356792a4806220015488631", + "@type": "GeographicAddressRef" + } + ], + "productConfiguration": { + "@type": "ACCESS_E_LINE", + "bandwidth": 100, + "bandwidthUnit": "MBPS", + "classOfService": "SILVER", + "paymentType": "invoice", + "name": "Qe 1 Company Connection 0904", + "buyerCompanyId": "qe1company", + "destUNIMetroId": "5db65dcf5d545c000bc6884b", + "type": "LAYER2" + }, + "productOffering": { + "id": "ACCESS_E_LINE" + }, + "productRelationship": [ + { + "relationshipType": "CONNECTS_TO_ENNI", + "id": "6371e5fa2fb2fa00155a3535" + }, + { + "relationshipType": "CONNECTS_TO_UNI", + "id": "63634cbf11ffdd00151fc6fb" + } + ] + }, + "action": "add", + "id": "ELINE", + "subjectToFeasibilityCheck": false, + "quoteItemInstallationInterval": { + "amount": 1, + "units": "businessMinutes" + }, + "state": "approved.orderable", + "quoteItemTerm": [ + { + "name": "ELine Item Term", + "duration": { + "amount": 3, + "units": "calendarMonths" + }, + "endOfTermAction": "roll", + "description": "no description", + "rollInterval": { + "amount": 1, + "units": "calendarMonths" + } + } + ], + "quoteItemPrice": [ + { + "unitOfMeasure": "", + "price": { + "dutyFreeAmount": { + "unit": "USD", + "value": 1547.81 + }, + "taxRate": "", + "taxIncludedAmount": { + "unit": "", + "value": "" + } + }, + "name": "", + "priceType": "", + "description": "", + "recurringChargePeriod": "" + } + ] + } + ], + "quoteDate": "2025-06-10 07:37:57", + "externalId": "AEL[8202] Sync Quote FIRM - ADD", + "instantSyncQuote": true, + "requestedQuoteCompletionDate": "2027-12-31T23:00:00Z", + "effectiveQuoteCompletionDate": "2025-06-10 07:37:57", + "validFor": { + "startDateTime": "2025-06-10 07:37:57", + "endDateTime": "2025-06-11 07:37:57" + }, + "quoteLevel": "firm", + "state": "approved.orderable" + } + } + } + } + }, + "description": "Created (https://tools.ietf.org/html/rfc7231#section-6.3.2)" + }, + "400": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error400" + } + } + }, + "description": "Bad Request" + }, + "401": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error401" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error403" + } + } + }, + "description": "Forbidden" + }, + "422": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "items": { + "$ref": "#/components/schemas/Error422" + }, + "type": "array" + } + } + }, + "description": "Unprocessable entity due to the business validation problems in the Quote or one of the Quote items" + }, + "500": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error500" + } + } + }, + "description": "Internal Server Error" + } + }, + "summary": "Send request to perform a quotation", + "tags": ["Quote Management"], + "security": [ + { + "x-sonata-buyer-key-and-api-key": [] + } + ], + "x-codegen-request-body-name": "quote" + } + }, + "/mefApi/sonata/quoteManagement/v8/quote/{id}": { + "get": { + "description": "This operation retrieves a Quote entity. Attribute selection is enabled for all first level attributes.", + "operationId": "retrieveQuote", + "parameters": [ + { + "description": "Identifier of the Quote", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The unique identifier of the organization that is acting as the a Buyer. MUST be specified in the request only when the requester represents more than one Buyer.\nReference: MEF 79 (Sn 8.8)", + "in": "query", + "name": "buyerId", + "schema": { + "type": "string" + } + }, + { + "description": "The unique identifier of the organization that is acting as the Seller. MUST be specified in the request only when the responding entity\n represents more than one Seller.\n\nReference: MEF 79 (Sn 8.8)", + "in": "query", + "name": "sellerId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Quote" + } + } + }, + "description": "OK. (https://tools.ietf.org/html/rfc7231#section-6.3.1)" + }, + "400": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error400" + } + } + }, + "description": "Bad Request" + }, + "401": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error401" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error403" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error404" + } + } + }, + "description": "Not Found" + }, + "500": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error500" + } + } + }, + "description": "Internal Server Error" + } + }, + "summary": "Retrieves a Quote by ID", + "tags": ["Quote Management"], + "security": [ + { + "x-sonata-buyer-key-and-api-key": [] + } + ] + } + }, + "/mefApi/sonata/productInventory/v7/product": { + "get": { + "description": "This operation lists or finds Product entities", + "operationId": "listProduct", + "parameters": [ + { + "description": "The status of the product", + "in": "query", + "name": "status", + "required": false, + "schema": { + "type": "string", + "enum": [ + "active", + "active.pendingChange", + "cancelled", + "pendingActive", + "pendingTerminate", + "suspended", + "suspendedPendingTerminate", + "terminated" + ] + } + }, + { + "description": "A reference to a Product specification by id", + "in": "query", + "name": "productSpecificationId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "A reference to a Product offering by id", + "in": "query", + "name": "productOfferingId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "A reference to the externalId provided in the order", + "in": "query", + "name": "externalId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "A site identifier which is associated to the Product", + "in": "query", + "name": "geographicalSiteId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "This criteria allows to retrieve all Product records with a Product Relationship to a specified Product.\nE.g. All Products related to Product with ID 5", + "in": "query", + "name": "relatedProductId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "The Billing Account associated with the Product.", + "in": "query", + "name": "billingAccountId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Identifies Product Order associated with the Product", + "in": "query", + "name": "productOrderId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Less than the date that is the initial install date for the Product", + "in": "query", + "name": "startDate.lt", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "description": "Greater than the date that is the initial install date for the Product", + "in": "query", + "name": "startDate.gt", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "description": "Less than date that the last change affecting this Product was completed", + "in": "query", + "name": "lastUpdateDate.lt", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "description": "Greater than the date that the last change affecting this Product was completed", + "in": "query", + "name": "lastUpdateDate.gt", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "description": "The unique identifier of the organization that is acting as the a Buyer. MUST be specified in the request only when the requester represents more than one Buyer.\nReference: MEF 81 (Sn 8.3)", + "in": "query", + "name": "buyerId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "The unique identifier of the organization that is acting as the Seller. MUST be specified in the request only when responding entity represents more than one Seller.\nReference: MEF 81 (Sn 8.3)", + "in": "query", + "name": "sellerId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Requested index for start of item to be provided in response requested by client. Note that the index starts with \"0\".", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "Requested number of items to be provided in response requested by client", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MEFProduct_Find" + } + }, + "examples": { + "UNI-Product": { + "summary": "UNI Product", + "value": [ + { + "id": "6840040154392a0ac9eb8d3d", + "startDate": "2025-06-04T08:29:53.867Z", + "status": "active", + "productSpecification": {}, + "relatedSite": [], + "productOffering": { + "id": "UNI" + }, + "lastUpdateDate": "", + "externalId": "AEL[9301] General On-net Order ", + "productRelationship": [], + "billingAccount": { + "id": "001" + }, + "productOrderItem": [ + { + "productOrderHref": "", + "productOrderItemId": "UNI", + "productOrderId": "23271c8c-4ec2-4c9d-a183-892d9b763e57" + } + ] + } + ] + }, + "Eline-Product": { + "summary": "Eline Product", + "value": [ + { + "id": "684252a8f0e53fcd55d64b29", + "status": "pendingActive", + "productSpecification": {}, + "relatedSite": [], + "productOffering": { + "id": "ACCESS_E_LINE" + }, + "lastUpdateDate": "2025-06-06T02:30:05.273Z", + "externalId": "AEL[9202] General On-net Order ", + "productRelationship": [ + { + "id": "6371e5fa2fb2fa00155a3535", + "relationshipType": "CONNECTS_TO_ENNI" + }, + { + "id": "63634cbf11ffdd00151fc6fb", + "relationshipType": "CONNECTS_TO_UNI" + } + ], + "billingAccount": { + "id": "001" + }, + "productOrderItem": [ + { + "productOrderHref": "", + "productOrderItemId": "ELINE", + "productOrderId": "90d124f3-075b-4b8c-b07e-13d1e921f3c3" + } + ], + "createdDate": "2025-06-06T02:30:00.150Z" + } + ] + } + } + } + }, + "description": "OK. (https://tools.ietf.org/html/rfc7231#section-6.3.1)", + "headers": { + "X-Pagination-Throttled": { + "description": "Used to indicate that result page was throttled to maximum possible size and there are additional results that can be fetched\n", + "schema": { + "type": "boolean" + } + }, + "X-Total-Count": { + "description": "The total number of matching items. E.g. if there are 50 matching items in total, but the request has offset=10 and limit=10, then the X-Total-Count is 50.\n", + "schema": { + "type": "integer" + } + }, + "X-Result-Count": { + "description": "The number of items included in the response", + "schema": { + "type": "integer" + } + } + } + }, + "400": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error400" + } + } + }, + "description": "Bad Request" + }, + "401": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error401" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error403" + } + } + }, + "description": "Forbidden" + }, + "422": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Error422" + } + } + } + }, + "description": "Unprocessable entity due to the business validation problems" + }, + "500": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error500" + } + } + }, + "description": "Internal Server Error" + } + }, + "summary": "List or find Product objects", + "tags": ["Product Inventory Management"], + "security": [ + { + "x-sonata-buyer-key-and-api-key": [] + } + ] + } + }, + "/mefApi/sonata/productInventory/v7/product/{id}": { + "get": { + "description": "This operation retrieves a Product entity.", + "operationId": "retrieveProduct", + "parameters": [ + { + "description": "Identifier of the Product", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Comma-separated properties to provide in response", + "in": "query", + "name": "fields", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "The unique identifier of the organization that is acting as the a Buyer. MUST be specified in the request only when the requester represents more than one Buyer.\nReference: MEF 81 (Sn 8.3)", + "in": "query", + "name": "buyerId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "The unique identifier of the organization that is acting as the Seller. MUST be specified in the request only when responding entity represents more than one Seller.\nReference: MEF 81 (Sn 8.3)", + "in": "query", + "name": "sellerId", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/MEFProduct" + }, + "examples": { + "UNI-Product": { + "summary": "UNI Product", + "value": { + "id": "6840040154392a0ac9eb8d3d", + "startDate": "2025-06-04T08:29:58.287Z", + "status": "terminated", + "productOrderItem": [ + { + "productOrderHref": "", + "productOrderItemId": "UNI", + "productOrderId": "23271c8c-4ec2-4c9d-a183-892d9b763e57" + } + ], + "relatedSite": [ + { + "role": "INSTALL_LOCATION", + "id": "6356792a4806220015488631", + "href": "" + } + ], + "productOffering": { + "href": "", + "id": "UNI" + }, + "productTerm": [ + { + "duration": { + "units": "calendarMonths", + "amount": 1 + }, + "endOfTermAction": "roll", + "name": "UNI Item Term", + "rollInterval": { + "units": "calendarMonths", + "amount": 1 + } + } + ], + "productRelationship": [], + "productConfiguration": { + "name": "test-qc01", + "@type": "UNI", + "dcfName": "qe-dcf-1", + "bandwidth": 1000, + "paymentType": "invoice", + "bandwidthUnit": "MBPS" + }, + "availableBandwidth": 1000, + "lastUpdateDate": "2025-06-04T10:09:34.000Z", + "createdDate": "2025-06-04T08:29:53.753Z" + } + }, + "Eline-Product": { + "summary": "Eline Product", + "value": { + "id": "684252a8f0e53fcd55d64b29", + "startDate": "2025-05-30T06:32:39.361Z", + "status": "active", + "productOrderItem": [ + { + "productOrderHref": "", + "productOrderItemId": "ELINE", + "productOrderId": "88e72b65-5997-4848-ab97-79fade33e387" + } + ], + "relatedSite": [ + { + "role": "INSTALL_LOCATION", + "id": "6360d0915064cc00157f7984", + "href": "" + }, + { + "role": "INSTALL_LOCATION", + "id": "6356792a4806220015488631", + "href": "" + } + ], + "productOffering": { + "href": "", + "id": "ACCESS_E_LINE" + }, + "productTerm": [ + { + "duration": { + "units": "calendarMonths", + "amount": 1 + }, + "endOfTermAction": "roll", + "name": "ELine Item Term", + "rollInterval": { + "units": "calendarMonths", + "amount": 1 + } + } + ], + "productRelationship": [ + { + "id": "6371e5fa2fb2fa00155a3535", + "relationshipType": "CONNECTS_TO_ENNI" + }, + { + "id": "63634cbf11ffdd00151fc6fb", + "relationshipType": "CONNECTS_TO_UNI" + } + ], + "productConfiguration": { + "name": "Qe 1 Company Connection 0904", + "type": "LAYER2", + "@type": "ACCESS_E_LINE", + "bandwidth": 1, + "paymentType": "invoice", + "bandwidthUnit": "MBPS", + "buyerCompanyId": "qe1company", + "classOfService": "SILVER", + "destUNIMetroId": "5db65dcf5d545c000bc6884b" + }, + "sourceVlan": 1108, + "destVlan": 1375 + } + } + } + } + }, + "description": "OK. (https://tools.ietf.org/html/rfc7231#section-6.3.1)" + }, + "400": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error400" + } + } + }, + "description": "Bad Request" + }, + "401": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error401" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error403" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error404" + } + } + }, + "description": "Not Found" + }, + "500": { + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error500" + } + } + }, + "description": "Internal Server Error" + } + }, + "summary": "Retrieves a Product by ID", + "tags": ["Product Inventory Management"], + "security": [ + { + "x-sonata-buyer-key-and-api-key": [] + } + ] + } + }, + "/polaris/company/{companyId}/cloudrouter/resources": { + "get": { + "parameters": [ + { + "description": "The id of the company. Used to search for associated CloudRouters.", + "example": "5d4d056242fbd3000ab4c01d", + "in": "path", + "name": "companyId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The number of results per page to get.", + "example": 1, + "in": "query", + "name": "count", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "The number of records to skip (for pagination).", + "example": 3, + "in": "query", + "name": "skip", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": { + "application/json": { + "example": { + "results": [ + { + "id": "cloudrouter-resource-id", + "type": "CLOUDROUTER", + "usages": [], + "capabilities": [ + { + "id": "capability-id", + "type": "CLOUDROUTER", + "limit": null, + "meta": {} + } + ], + "meta": { + "metroId": "Fake metro id", + "serviceName": "My CloudRouter", + "serviceId": "console-service-id" + } + } + ], + "skip": 0, + "count": 1, + "total": 10 + } + } + } + } + }, + "tags": ["product-cloudrouter"], + "operationId": "Query-CloudRouters-with-CompanyID", + "description": "> An api for listing a company's CloudRouters, with paginated results. For more info on retrieving a company ID, see [Acquiring user details](./manage-company.md).", + "summary": "List Company CloudRouters" + } + }, + "/v2/marketplace-orders/regulatory-check": { + "post": { + "responses": { + "200": { + "description": "OK", + "headers": {}, + "content": {} + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json;charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/Error422-2" + } + } + } + } + }, + "summary": "RegulatoryChecks", + "operationId": "regulatory-checks", + "description": "Check if the supplied order configuration complies with the relevant regulatory requirements.", + "tags": ["Regulatory Checks"], + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "required": ["order"], + "properties": { + "order": { + "$ref": "#/components/schemas/CreateGenericOrderActionCreate" + } + } + } + } + } + } + } + } + }, + "components": { + "securitySchemes": { + "api-key": { + "description": "API Keys are provisioned by Support against your Console Connect User Account. Email ***[Support](mailto:support@consoleconnect.com)*** to request a key.\n\nHere is an example request using an API Key:\n\n```\ncurl -X GET https://api.consoleconnect.com/api/auth/token \\\n-H \"Authorization: Bearer {api key}\"\n```\n", + "type": "http", + "scheme": "bearer", + "bearerFormat": "API key" + }, + "x-sonata-buyer-key-and-api-key": { + "description": "\nConsole Connect API keys are provisioned by Support against your Console Connect User Account. Email [Support](mailto:support@consoleconnect.com) to request a key. \n\nAnother layer of Authentication, Contact [Support](mailto:support@consoleconnect.com) for x-sonata-buyer-key in the meantime.\n\nExample: \n\n ```\n\n curl -X GET https://api.consoleconnect.com/Sonata/mefApi/sonata/productInventory/v7/product/{id} \\\n\n -H \"Authorization: Bearer [[api-key]]\"\n\n -H \"x-sonata-buyer-key: Bearer [[x-sonata-buyer-key]]\"\n\n ```\n", + "type": "http", + "scheme": "bearer" + } + }, + "schemas": { + "Duration": { + "type": "object", + "properties": { + "value": { + "type": "number", + "description": "The duration the service was ordered for, in conjunction with durationUnit. Max duration by unit is: days: 6; weeks: 3; month: 36; years: 3" + }, + "unit": { + "type": "string", + "enum": ["d", "w", "m", "y"], + "description": "The unit of duration the service was ordered for, in conjunction with duration. 'd' for days, 'w' for weeks, 'm' for months, 'y' for years." + } + } + }, + "Discount": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier." + }, + "value": { + "type": "number", + "description": "The value in conjunction with the `discountType`." + }, + "discountType": { + "type": "string", + "description": "Type of discount.", + "default": "percentage" + }, + "marketingCode": { + "type": "string", + "description": "Unique discount code." + }, + "duration": { + "type": "string", + "description": "How long the discount applies, e.g., once, recurring", + "default": "recurring" + }, + "applicableProducts": { + "type": "array", + "description": "The list of products to which this discount may be applied. If empty, discount is general and can be applied to anything.", + "items": { + "type": "string", + "enum": ["PORT", "IO-D", "L2", "L3VPN", "L3VPN-SITE", "EDGE"] + } + }, + "applicableDcfs": { + "type": "array", + "description": "The list of DCF IDs to which this discount may be applied. If empty, discount is general and can be applied to anything.", + "items": { + "type": "string" + } + }, + "applicableMetros": { + "type": "array", + "description": "The list of Metro IDs to which this discount may be applied. If empty, discount is general and can be applied to anything.", + "items": { + "type": "string" + } + }, + "deletedAt": { + "type": "string", + "description": "", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "", + "readOnly": true + } + } + }, + "BaseItem": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The type of product.", + "enum": ["PORT", "CONNECTION"] + }, + "price": { + "type": "number", + "description": "The total cost of the duration." + }, + "preAuthAmount": { + "type": "number", + "description": "The amount that will be charged when the user places their order when the duration is less than a month, otherwise it is the monthly cost." + }, + "basicTotalAmount": { + "type": "number", + "description": "The total cost of the duration.", + "nullable": true + }, + "basicMonthlyAmount": { + "type": "number", + "description": "The monthly cost.", + "nullable": true + }, + "amountSaved": { + "type": "number", + "description": "The amount saved monthly.", + "nullable": true + }, + "amountSavedTotal": { + "type": "number", + "description": "The total amount saved with the duration." + }, + "crossConnectAmount": { + "nullable": true, + "type": "number", + "description": "The Cross Connect add-on monthly cost." + }, + "discount": { + "$ref": "#/components/schemas/Discount" + }, + "priceCalculatorAttributes": { + "type": "object", + "properties": { + "discountIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "discounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Discount" + } + } + } + }, + "formula": { + "description": "Used in calculating for the total cost.", + "type": "string", + "nullable": true + }, + "factors": { + "description": "List of values to use in conjunction with `formula` to calculate for the total cost.", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "number": { + "type": "integer" + }, + "ref": { + "type": "object", + "nullable": true + } + } + }, + "nullable": true + } + } + }, + "DCF": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "popId": { + "type": "string", + "nullable": true + }, + "regionIds": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "metroIds": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + } + }, + "PortItem": { + "allOf": [ + { + "$ref": "#/components/schemas/BaseItem" + }, + { + "type": "object", + "properties": { + "entity": { + "type": "object", + "properties": { + "dcf": { + "$ref": "#/components/schemas/DCF" + }, + "speed": { + "type": "number", + "description": "The speed of the port in Mbps, e.g., 1000 = 1000Mbps or 1Gbps, 10000 = 10Gbps" + }, + "discountId": { + "type": "string" + } + } + } + } + } + ] + }, + "ConnectionItem": { + "allOf": [ + { + "$ref": "#/components/schemas/BaseItem" + }, + { + "type": "object", + "properties": { + "entity": { + "type": "object", + "properties": { + "srcDcf": { + "$ref": "#/components/schemas/DCF" + }, + "destDcf": { + "$ref": "#/components/schemas/DCF" + }, + "duration": { + "$ref": "#/components/schemas/Duration" + }, + "bandwidth": { + "type": "number", + "description": "The required bandwidth of the connection in Mbps, e.g., 30 = 30Mbps, 100 = 100Mbps" + }, + "classOfService": { + "type": "string", + "enum": ["GOLD", "SILVER", "BRONZE"], + "description": "The class of service for the connection." + }, + "discountId": { + "type": "string" + } + } + } + } + } + ] + }, + "PortsConnectionsResponse": { + "type": "object", + "properties": { + "results": { + "type": "array", + "description": "Returned by the pricing calculator.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/PortItem" + }, + { + "$ref": "#/components/schemas/ConnectionItem" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "PORT": "#/components/schemas/PortItem", + "CONNECTION": "#/components/schemas/ConnectionItem" + } + } + } + } + } + }, + "ErrorResponseSchema": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "message": { + "type": "string" + } + } + }, + "ip-prices": { + "type": "object", + "description": "Ip Block options costs (chargable on top of the IO-D service charge)", + "properties": { + "ipv426Cost": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ], + "description": "" + }, + "ipv427Cost": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ], + "description": "" + }, + "ipv428Cost": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ], + "description": "" + }, + "ipv429Cost": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ], + "description": "" + }, + "ipv430Cost": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ], + "description": "" + } + }, + "example": { + "ipv426Cost": null, + "ipv427Cost": null, + "ipv428Cost": null, + "ipv429Cost": 2, + "ipv430Cost": 3 + } + }, + "GiaPricing-Recurring": { + "type": "object", + "properties": { + "contractTotals": { + "type": "object", + "description": "IO-D full duration of service charge rate and IP Block options usage duration charge rate.", + "properties": { + "giaCost": { + "type": "number", + "description": "IO-D full duration of service charge rate." + }, + "ipCosts": { + "$ref": "#/components/schemas/ip-prices" + } + } + }, + "unitCosts": { + "type": "object", + "description": "IO-D service monthly cost and Ip Block options monthly cost", + "properties": { + "giaCost": { + "type": "number", + "description": "IO-D service monthly cost" + }, + "ipCosts": { + "$ref": "#/components/schemas/ip-prices" + } + } + }, + "contractTotalsAmountSaved": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "unitCostsAmountSaved": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "burstRate": { + "type": "number" + }, + "duration": { + "$ref": "#/components/schemas/Duration" + } + }, + "example": { + "contractTotals": { + "giaCost": 100, + "ipCosts": { + "ipv426Cost": 10, + "ipv427Cost": 10, + "ipv428Cost": 10, + "ipv429Cost": 20, + "ipv430Cost": 30 + } + }, + "unitCosts": { + "giaCost": "20,", + "ipCosts": { + "ipv426Cost": 1, + "ipv427Cost": 1, + "ipv428Cost": 1, + "ipv429Cost": 2, + "ipv430Cost": 3 + } + }, + "contractTotalsAmountSaved": 0, + "unitCostsAmountSaved": 0, + "burstRate": 10, + "duration": { + "unit": "m", + "value": 6 + } + } + }, + "GiaPricing-OneOff": { + "type": "object", + "properties": { + "onceOff": { + "type": "object", + "description": "IO-D full duration of service charge rate and IP Block options usage duration charge rate.", + "properties": { + "giaCost": { + "type": "number", + "description": "IO-D full duration of service charge rate" + }, + "ipCosts": { + "$ref": "#/components/schemas/ip-prices" + } + } + }, + "burstRate": { + "type": "number" + }, + "duration": { + "$ref": "#/components/schemas/Duration" + } + }, + "example": { + "onceOff": { + "giaCost": 100, + "ipCosts": null + }, + "duration": { + "unit": "d", + "value": 6 + } + } + }, + "GiaPricing-NoPrice": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "" + } + }, + "example": { + "message": "Sorry! We can’t find a price for this rate limit. Please email support@consoleconnect.com to request a price." + } + }, + "CloudRouterPriceCalcSiteStandard": { + "type": "object", + "properties": { + "priceRefId": { + "type": "string", + "description": "Price reference ID." + }, + "portId": { + "type": "string", + "description": "The ID of the Port." + }, + "dcfId": { + "type": "string", + "description": "The ID of the Data Center Facility." + }, + "rateLimit": { + "type": "object", + "description": "", + "properties": { + "unit": { + "description": "Unit of the rateLimit", + "type": "string", + "enum": ["Mbps", "Gbps"] + }, + "value": { + "description": "value of the rateLimit", + "type": "number" + } + } + }, + "classOfService": { + "type": "object", + "description": "", + "properties": { + "name": { + "type": "string", + "description": "", + "enum": ["BRONZE", "SILVER", "GOLD"] + }, + "value": { + "type": "number", + "description": "" + } + } + }, + "discountId": { + "type": "string", + "description": "" + } + }, + "required": ["dcfId", "rateLimit", "classOfService"] + }, + "CloudRouterPriceCalcSiteSIMPool": { + "type": "object", + "properties": { + "priceRefId": { + "type": "string", + "description": "Price reference ID." + }, + "simPool": { + "type": "boolean", + "description": "If true, site will be processed as an IoT SIM Pool site" + } + }, + "required": ["simPool"] + }, + "CloudRouterPricingAddSiteStandard": { + "type": "object", + "properties": { + "site": { + "type": "object", + "properties": { + "portId": { + "type": "string", + "description": "The ID of the Port." + }, + "rateLimit": { + "type": "object", + "properties": { + "unit": { + "type": "string", + "description": "" + }, + "value": { + "type": "number", + "description": "" + } + } + }, + "classOfService": { + "type": "object", + "properties": { + "name": { + "type": "string", + "enum": ["BRONZE", "SILVER", "GOLD"], + "description": "" + }, + "value": { + "type": "number", + "description": "" + } + } + }, + "discountId": { + "type": "string", + "nullable": true, + "description": "The ID of the discount code applied." + }, + "simPool": { + "type": "boolean", + "description": "If true, site will be processed as an IoT SIM Pool site" + } + }, + "required": ["portId", "rateLimit", "classOfService"] + } + } + }, + "CloudRouterPricingAddSiteSIMPool": { + "type": "object", + "properties": { + "site": { + "type": "object", + "properties": { + "simPoolId": { + "type": "string", + "description": "" + } + }, + "required": ["simPoolId"] + } + } + }, + "RateLimit": { + "type": "object", + "description": "", + "properties": { + "rate": { + "type": "number", + "description": "" + }, + "unit": { + "type": "string", + "description": "" + }, + "value": { + "type": "number", + "description": "" + } + } + }, + "CloudRouterClassOfService": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "", + "enum": ["BRONZE", "SILVER", "GOLD"] + }, + "value": { + "type": "string", + "description": "" + } + } + }, + "CloudRouterSitePricing": { + "type": "object", + "properties": { + "l3vpnId": { + "type": "string", + "description": "" + }, + "baseL3vpnCost": { + "type": "number", + "description": "" + }, + "totalContractCost": { + "type": "number", + "description": "" + }, + "totalHourlySiteCost": { + "type": "number", + "description": "" + }, + "totalMonthlySiteCost": { + "type": "number", + "description": "" + }, + "discount": { + "$ref": "#/components/schemas/Discount" + }, + "sites": { + "type": "array", + "items": { + "type": "object", + "properties": { + "site": { + "type": "object", + "description": "", + "properties": { + "id": { + "type": "string", + "description": "" + }, + "companyId": { + "type": "string", + "description": "" + }, + "l3vpnId": { + "type": "string", + "description": "" + }, + "name": { + "type": "string", + "description": "" + }, + "type": { + "type": "string", + "description": "" + }, + "portId": { + "type": "string", + "description": "" + }, + "slVlanId": { + "type": "string", + "description": "" + }, + "rateLimit": { + "$ref": "#/components/schemas/RateLimit" + }, + "mtu": { + "type": "string", + "description": "" + }, + "classOfService": { + "type": "array", + "description": "", + "items": { + "$ref": "#/components/schemas/CloudRouterClassOfService" + } + }, + "redundancySiteType": { + "type": "string", + "description": "" + }, + "redundancyLinkedSiteId": { + "type": "string", + "description": "" + }, + "status": { + "type": "string", + "description": "" + }, + "simPoolId": { + "type": "string", + "description": "" + }, + "company_id": { + "type": "string", + "description": "" + }, + "l3vpn_id": { + "type": "string", + "description": "" + }, + "deleted_at": { + "type": "string", + "description": "" + }, + "created_at": { + "type": "string", + "description": "" + }, + "updated_at": { + "type": "string", + "description": "" + }, + "discountId": { + "type": "string", + "description": "" + }, + "priceRefId": { + "type": "string", + "description": "" + }, + "providerInfo": { + "type": "object", + "description": "", + "properties": { + "portName": { + "type": "string", + "description": "" + }, + "portId": { + "type": "string", + "description": "" + }, + "portPartner": { + "type": "object", + "description": "", + "properties": { + "type": { + "type": "string", + "description": "" + }, + "regionName": { + "type": "string", + "description": "" + }, + "regionNames": { + "type": "string", + "description": "" + }, + "zone": { + "type": "string", + "description": "" + }, + "connectionSpeeds": { + "type": "array", + "description": "" + }, + "vlanId": { + "type": "string", + "description": "" + }, + "partnerPort": { + "type": "string", + "description": "" + } + } + }, + "companyId": { + "type": "string", + "description": "" + }, + "dcfName": { + "type": "string", + "description": "" + }, + "dcfId": { + "type": "string", + "description": "" + }, + "metroId": { + "type": "string", + "description": "" + }, + "city": { + "type": "string", + "description": "" + }, + "country": { + "type": "string", + "description": "" + } + } + }, + "hourlyCost": { + "type": "number", + "description": "" + }, + "dailyCost": { + "type": "number", + "description": "" + }, + "monthlyCost": { + "type": "number", + "description": "" + } + } + } + } + } + } + } + }, + "Filter": { + "type": "object", + "properties": { + "where": { + "type": "object", + "description": "A set of condition or criteria that will run against the record's attributes or properties.

\nCommonly used operators: `nin` - not in, `neq` - not equal, and `like` - keyword search match

\nexample 1: `{\"where\": {\"recordField\": {\"neq\": \"deleted\"}}}`
example 2: `{\"where\": {\"shapeName\": {\"nin\": [\"circle\", \"square\"]}}}`

", + "example": { + "company.addresses.city": "Sydney" + } + }, + "skip": { + "type": "integer", + "description": "The \"page\" of results from a query. accepted", + "example": 5 + }, + "limit": { + "type": "integer", + "description": "The number of results to be returned in a query. This should be a small value for quicker load times.", + "example": 10 + } + } + }, + "AddressWithGeo": { + "type": "object", + "properties": { + "geo": { + "properties": { + "type": { + "type": "string" + }, + "coordinates": { + "items": { + "type": "number" + }, + "type": "array" + } + }, + "type": "object" + }, + "registered": { + "type": "boolean" + }, + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "state": { + "type": "string" + }, + "country": { + "type": "string", + "description": "A [2-letter, ISO2 country code](https://www.iban.com/country-codes).", + "example": "AU" + }, + "zip": { + "type": "string", + "description": "The ZIP or Post code for the location." + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + } + } + }, + "Speed": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Text representation of the supported Port Speed." + }, + "value": { + "type": "integer", + "description": "The integer value of the Port Speed represented in Mbps." + } + }, + "example": { + "name": "10000 Mbps", + "value": 10000 + } + }, + "DataCenterFacility": { + "properties": { + "system": { + "properties": { + "welcomeMessage": { + "type": "string", + "nullable": true + } + }, + "type": "object" + }, + "company": { + "properties": { + "privacy": { + "properties": { + "network": { + "properties": { + "mode": { + "type": "string" + }, + "blackListIds": { + "items": { + "type": "string" + }, + "type": "array" + }, + "whiteListIds": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "community": { + "properties": { + "mode": { + "type": "string" + }, + "blackListIds": { + "items": { + "type": "string" + }, + "type": "array" + }, + "whiteListIds": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "industry": { + "type": "string", + "nullable": true + }, + "partnerType": { + "type": "string", + "nullable": true + }, + "companySize": { + "type": "string", + "nullable": true + }, + "dateFounded": { + "type": "string", + "nullable": true + }, + "registeredName": { + "type": "string", + "nullable": true + }, + "businessRegistrationCertReference": { + "type": "string", + "nullable": true + }, + "businessRegistrationCertUploadedAt": { + "type": "string", + "nullable": true + }, + "businessRegistrationCertRejectedReason": { + "type": "string", + "nullable": true + }, + "clientId": { + "type": "string", + "nullable": true + }, + "first": { + "type": "string", + "nullable": true + }, + "last": { + "type": "string", + "nullable": true + }, + "address": { + "type": "string", + "nullable": true + }, + "city": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "zip": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "fax": { + "type": "string", + "nullable": true + }, + "addresses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AddressWithGeo" + } + }, + "businessType": { + "type": "string" + }, + "regionalInternetRegistry": { + "items": { + "type": "string" + }, + "type": "array" + }, + "businessRegistrationCertVerified": { + "type": "string" + }, + "website": { + "type": "string" + }, + "emailDomains": { + "items": { + "type": "string" + }, + "type": "array" + }, + "businessDevelopmentManagerTypePreference": { + "type": "string" + }, + "isIoTDemoCompany": { + "type": "boolean" + } + }, + "type": "object", + "description": "A set of business-related properties for the DCF." + }, + "dataCenterFacility": { + "properties": { + "airportCodes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "speeds": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Speed" + } + }, + "metroId": { + "type": "string", + "description": "An ObjectId used to lookup the Metro this DCF belongs to." + }, + "ready": { + "type": "boolean", + "description": "Whether the DCF can accept new Physical Ports." + }, + "id": { + "type": "string", + "nullable": true + }, + "nniReady": { + "type": "boolean", + "description": "Whether the DCF can accept Hybrid NNI Ports." + }, + "brandId": { + "type": "string" + }, + "canBundleCrossConnect": { + "type": "boolean" + } + }, + "type": "object", + "description": "A set of properties related to the DCF's operational status." + }, + "cloudProviderDetails": { + "properties": { + "asn": { + "properties": { + "range": { + "items": { + "type": "number" + }, + "type": "array" + } + }, + "type": "object" + }, + "bgpAuthority": { + "type": "string" + }, + "companyType": { + "type": "string" + } + }, + "type": "object" + }, + "stats": { + "properties": { + "members": { + "type": "number" + }, + "interconnections": { + "type": "number" + }, + "followers": { + "type": "number" + }, + "following": { + "type": "number" + }, + "privateArticles": { + "type": "number" + }, + "privateEvents": { + "type": "number" + }, + "privatePosts": { + "type": "number" + }, + "articles": { + "type": "number" + }, + "events": { + "type": "number" + }, + "posts": { + "type": "number" + } + }, + "type": "object" + }, + "overviewImage": { + "type": "string", + "nullable": true + }, + "businessRegistrationNumber": { + "type": "string", + "nullable": true + }, + "signedCompanyRefId": { + "type": "string", + "nullable": true + }, + "accountManagerEmail": { + "type": "string", + "nullable": true + }, + "accountManagerId": { + "type": "string", + "nullable": true + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "username": { + "type": "string", + "description": "A human-friendly identifier unique to the DCF. Some of our endpoints accept this value as a parameter." + }, + "deletedAt": { + "type": "string", + "nullable": true + }, + "deleted": { + "type": "boolean" + }, + "verified": { + "type": "boolean" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "status": { + "type": "string" + }, + "displayOrder": { + "type": "number" + }, + "groups": { + "items": { + "type": "string" + }, + "type": "array" + }, + "location": { + "type": "string", + "nullable": true + }, + "summary": { + "type": "string", + "nullable": true + }, + "headline": { + "type": "string" + }, + "background": { + "type": "string", + "nullable": true + }, + "avatarId": { + "type": "string" + }, + "name": { + "type": "string", + "description": "The name of the DCF for display purposes.", + "example": "Console Connect - Hermes House" + }, + "type": { + "type": "string" + }, + "popIds": { + "items": { + "type": "string" + }, + "type": "array" + }, + "costbookLocationId": { + "type": "string" + }, + "provider": { + "items": { + "type": "string" + }, + "type": "array" + }, + "verifiedIdentity": { + "type": "boolean" + }, + "categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "isCloudProvider": { + "type": "boolean" + }, + "l3CostbookLocationId": { + "type": "string" + }, + "nnis": { + "items": { + "type": "string" + }, + "type": "array" + }, + "bundleCrossConnectChargeId": { + "type": "string" + }, + "signedCompanyVerified": { + "type": "boolean" + }, + "companies": { + "items": { + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string", + "description": "An ObjectId unique to the DCF. A large portion of our endpoints use this value as a parameter or property.", + "example": "507f1f77bcf86cd799439011" + }, + "online": { + "type": "boolean" + } + }, + "type": "object", + "example": { + "id": "507f1f77bcf86cd799439011", + "name": "Console Connect - Hermes House", + "username": "pccwg-hermes-house", + "company": { + "addresses": [ + { + "street": "5/F, Hermes House,10 Middle Road,Tsim Sha Tsui", + "city": "Hong Kong", + "country": "CN" + } + ] + }, + "dataCenterFacility": { + "metroId": "507f1f77bcf86cd799439011", + "ready": true, + "nniReady": true + } + } + }, + "NotFoundErrorResponseSchema": { + "type": "object", + "properties": { + "error": { + "type": "object", + "properties": { + "statusCode": { + "type": "string", + "description": "The HTTP status code of the error" + }, + "name": { + "type": "string", + "description": "The name of the error" + }, + "message": { + "type": "string", + "description": "The detailed message of the error" + } + } + } + } + }, + "CompanyModel": { + "example": { + "name": "Foo International", + "businessRegistrationNumber": "EXAMPLE-321", + "company": { + "addresses": [ + { + "primary": true, + "country": "US", + "address": "17 Anywhere Pl", + "city": "Major City", + "state": "OH", + "zip": "44101" + } + ], + "emailDomains": ["foo.co"], + "businessType": "Data Center" + } + } + }, + "Company": { + "properties": { + "officeAddress": { + "type": "string", + "nullable": true + }, + "system": { + "properties": { + "welcomeMessage": { + "type": "string", + "nullable": true + } + }, + "type": "object" + }, + "company": { + "properties": { + "industry": { + "type": "string", + "nullable": true + }, + "partnerType": { + "type": "string", + "nullable": true + }, + "companySize": { + "type": "string", + "nullable": true + }, + "dateFounded": { + "type": "string", + "nullable": true + }, + "clientId": { + "type": "string", + "nullable": true + }, + "first": { + "type": "string", + "nullable": true + }, + "last": { + "type": "string", + "nullable": true + }, + "address": { + "type": "string", + "nullable": true + }, + "city": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "zip": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "fax": { + "type": "string", + "nullable": true + }, + "website": { + "type": "string" + }, + "businessType": { + "type": "string" + }, + "registeredName": { + "type": "string" + }, + "addresses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AddressWithGeo" + } + }, + "isIoTDemoCompany": { + "type": "boolean" + } + }, + "type": "object" + }, + "cloudProviderDetails": { + "properties": { + "asn": { + "properties": { + "range": { + "items": { + "type": "number" + }, + "type": "array" + } + }, + "type": "object" + }, + "bgpAuthority": { + "type": "string" + }, + "companyType": { + "type": "string" + } + }, + "type": "object" + }, + "stats": { + "properties": { + "members": { + "type": "number" + }, + "interconnections": { + "type": "number" + }, + "followers": { + "type": "number" + }, + "following": { + "type": "number" + }, + "privateArticles": { + "type": "number" + }, + "privateEvents": { + "type": "number" + }, + "privatePosts": { + "type": "number" + }, + "articles": { + "type": "number" + }, + "events": { + "type": "number" + }, + "posts": { + "type": "number" + } + }, + "type": "object" + }, + "overviewImage": { + "type": "string", + "nullable": true + }, + "accountManagerEmail": { + "type": "string", + "nullable": true + }, + "accountManagerId": { + "type": "string", + "nullable": true + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "username": { + "type": "string" + }, + "deletedAt": { + "type": "string", + "nullable": true + }, + "deleted": { + "type": "boolean" + }, + "verified": { + "type": "boolean" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "status": { + "type": "string" + }, + "displayOrder": { + "type": "number" + }, + "groups": { + "items": { + "type": "string" + }, + "type": "array" + }, + "location": { + "type": "string", + "nullable": true + }, + "summary": { + "type": "string" + }, + "headline": { + "type": "string", + "nullable": true + }, + "background": { + "type": "string" + }, + "avatarId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "oldAvatarId": { + "type": "string" + }, + "verifiedIdentity": { + "type": "boolean" + }, + "portsActive": { + "type": "number" + }, + "categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "isCloudProvider": { + "type": "boolean" + }, + "signedCompanyRefId": { + "type": "number" + }, + "signedCompanyVerified": { + "type": "boolean" + }, + "businessRegistrationNumber": { + "type": "string" + }, + "companies": { + "items": { + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "online": { + "type": "boolean" + } + }, + "type": "object" + }, + "Metro": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "code": { + "type": "string" + }, + "country": { + "type": "string" + }, + "regionIds": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "deletedAt": { + "type": "string", + "nullable": true + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "logo": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string" + }, + "ready": { + "type": "boolean" + }, + "canCreateController": { + "type": "boolean" + }, + "deleted": { + "type": "boolean" + } + } + }, + "Port_ordersModel": { + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "portName": { + "type": "string" + }, + "message": { + "type": "string", + "nullable": true + }, + "dcpCompanyId": { + "type": "string", + "nullable": true + }, + "locationId": { + "type": "string", + "nullable": true + }, + "speed": { + "$ref": "#/components/schemas/Speed" + }, + "requestedLocation": { + "type": "string", + "nullable": true + }, + "paymentType": { + "type": "string" + }, + "createdPortId": { + "type": "string" + }, + "portId": { + "type": "string", + "nullable": true + }, + "popId": { + "type": "string" + }, + "billingId": { + "type": "string" + }, + "externalId": { + "type": "string", + "nullable": true + }, + "salesRecordId": { + "type": "string", + "nullable": true + }, + "paymentTransactionId": { + "type": "string", + "nullable": true + }, + "payg": { + "type": "boolean" + }, + "status": { + "type": "string" + }, + "isEdgePort": { + "type": "boolean" + }, + "cancelled": { + "type": "boolean" + }, + "cancelledAt": { + "type": "string", + "nullable": true + }, + "loaSentAt": { + "type": "string", + "nullable": true + }, + "edgePayload": { + "type": "string", + "nullable": true + }, + "statusDetail": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "deletedBy": { + "type": "string", + "nullable": true + }, + "type": { + "type": "string" + }, + "dataCenterFacilityId": { + "type": "string" + }, + "metroId": { + "type": "string" + }, + "companyId": { + "type": "string" + }, + "deleted": { + "type": "boolean" + }, + "deletedAt": { + "type": "string", + "nullable": true + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "cancelledBy": { + "type": "string", + "nullable": true + }, + "company": { + "$ref": "#/components/schemas/Company" + }, + "dataCenterFacility": { + "$ref": "#/components/schemas/DataCenterFacility" + }, + "metro": { + "$ref": "#/components/schemas/Metro" + }, + "capabilities": { + "type": "object" + } + } + } + } + } + }, + "Port_orderModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier." + }, + "billingId": { + "type": "string", + "description": "The ID of the subscription." + }, + "createdPortId": { + "type": "string", + "description": "The ID of the created port." + }, + "popId": { + "type": "string", + "description": "The ID of the PoP." + }, + "discountId": { + "type": "string", + "nullable": true, + "description": "The ID of the discount code applied." + }, + "salesRecordId": { + "type": "string", + "description": "The ID of the sales record." + }, + "paymentTransactionId": { + "type": "string", + "nullable": true, + "description": "The ID of the payment transaction." + }, + "dataCenterFacilityId": { + "type": "string", + "description": "The ID of the Data Center Facility which this port order belongs to." + }, + "crossConnectId": { + "type": "string", + "nullable": true, + "description": "The ID of the Cross Connect which this port order belongs to." + }, + "metroId": { + "type": "string", + "description": "The ID of the Metro which this port order belongs to." + }, + "companyId": { + "type": "string", + "description": "The ID of the Company which this port order belongs to." + }, + "portName": { + "type": "string", + "description": "The name of the created port." + }, + "speed": { + "$ref": "#/components/schemas/Speed" + }, + "durationUnit": { + "type": "string", + "enum": ["y", "m"], + "description": "The unit of duration.\n| Enum | Description |\n| --- | --- |\n| y | Year |\n| m | Month |" + }, + "status": { + "type": "string", + "description": "The status of the Port Order.", + "enum": [ + "created", + "processing", + "allocated", + "loa_sent", + "setup_xc", + "done", + "cancelling", + "cancelled", + "error" + ] + }, + "paymentType": { + "type": "string", + "enum": ["invoice", "plan", "creditcard"] + }, + "payg": { + "type": "boolean", + "description": "If Pay-As-You-Go." + }, + "loaStatus": { + "type": "string", + "enum": ["TODO", "READY", "ERROR"] + }, + "loaSentAt": { + "type": "string", + "nullable": true + }, + "isEdgePort": { + "type": "boolean", + "description": "If an Edge Port Order." + }, + "edgePayload": { + "type": "object", + "nullable": true, + "description": "Payload object for Edge Port Order." + }, + "requestSource": { + "type": "string", + "description": "The source of the request in which this order was placed." + }, + "type": { + "type": "string", + "default": "PHYSICAL", + "description": "The type of the port." + }, + "company": { + "$ref": "#/components/schemas/Company" + }, + "dataCenterFacility": { + "$ref": "#/components/schemas/DataCenterFacility" + }, + "metro": { + "$ref": "#/components/schemas/Metro" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "capabilities": { + "type": "object" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string", + "nullable": true + }, + "cancelled": { + "type": "boolean" + }, + "cancelledAt": { + "type": "string" + }, + "cancelledBy": { + "type": "string", + "nullable": true + }, + "isEdgeOrder": { + "type": "boolean", + "default": false + }, + "controller": { + "type": "object", + "properties": { + "asn": { + "type": "number", + "nullable": true + }, + "cerAsn": { + "type": "number", + "nullable": true + }, + "cerIp": { + "properties": { + "ipv4": { + "type": "number", + "nullable": true + }, + "ipv6": { + "type": "number", + "nullable": true + } + }, + "type": "object" + }, + "id": { + "type": "string", + "nullable": true + }, + "ip": { + "properties": { + "ipv4": { + "type": "number", + "nullable": true + }, + "ipv6": { + "type": "number", + "nullable": true + } + }, + "type": "object" + }, + "serviceLayerId": { + "type": "string", + "nullable": true + }, + "vlan": { + "type": "number", + "nullable": true + } + } + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "deleted": { + "type": "boolean" + }, + "deletedAt": { + "type": "string" + }, + "deletedBy": { + "type": "string", + "nullable": true + } + } + }, + "PortModel": { + "example": { + "tags": { + "items": {}, + "type": "array" + } + }, + "properties": { + "dcpCompanyId": { + "type": "string" + }, + "deviceId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "speed": { + "type": "number", + "default": 1000 + }, + "speedOverprovisioningFactor": { + "type": "number", + "default": 1 + }, + "singleService": { + "type": "boolean", + "default": false + }, + "tags": { + "type": "array", + "items": {} + }, + "locationId": { + "type": "string" + }, + "dataCenterFacilityId": { + "type": "string" + }, + "popId": { + "type": "string" + }, + "metroId": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "ACTIVATING", + "READY", + "ACTIVE", + "DISABLING", + "DISABLED", + "DELETING", + "DELETED", + "UNKNOWN", + "ONBOARDING" + ] + }, + "serviceStatus": { + "description": "The ServiceStatus field controls whether a port is 'OPEN' or 'CLOSED' for creating new services, or, updating existing services already configured. This refines controls on ports where port.status=='ACTIVE' to enable an end of life cycle.", + "type": "string", + "default": "OPEN", + "enum": ["OPEN", "CLOSED"] + }, + "linkState": { + "type": "string", + "enum": ["UP", "DOWN", "NOTFOUND", "UNKNOWN"] + }, + "linkStateUpSince": { + "type": "string", + "format": "date-time" + }, + "linkStateSyncedAt": { + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "default": "PHYSICAL", + "enum": ["PHYSICAL", "DCP", "NNI", "EDGE"] + }, + "isEdgePort": { + "type": "boolean", + "default": false + }, + "edgePayload": { + "type": "object" + }, + "mediaType": { + "type": "string", + "default": "SMF", + "enum": ["SMF", "MMF", "COPPER"] + }, + "partner": { + "type": "object" + }, + "asnId": { + "type": "string" + }, + "ip": { + "type": "object" + }, + "capabilities": { + "type": "object" + }, + "activeChangedAt": { + "type": "string", + "format": "date-time" + }, + "firstActiveAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "deleted": { + "type": "boolean", + "default": false + }, + "deletedAt": { + "type": "string", + "format": "date-time" + }, + "importedAt": { + "type": "string", + "format": "date-time" + }, + "importer": { + "type": "string" + }, + "salesRecordId": { + "type": "string" + }, + "paymentType": { + "type": "string", + "enum": ["invoice", "creditcard", "plan"] + }, + "payg": { + "type": "boolean" + }, + "billingId": { + "type": "string" + }, + "vlanRanges": { + "type": "array", + "items": { + "type": "object", + "properties": { + "start": { + "type": "number" + }, + "end": { + "type": "number" + } + } + } + }, + "externalId": { + "type": "string" + } + }, + "type": "object" + }, + "ConnectionModel": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["LAYER2", "CLOUD", "LAYER2_GROUP"], + "description": "This should always be 'LAYER2'" + }, + "name": { + "type": "string", + "description": "The name of the connection" + }, + "srcPortId": { + "type": "string", + "description": "The source port id" + }, + "speed": { + "type": "object", + "$ref": "#/components/schemas/Speed" + }, + "destMetroId": { + "type": "string", + "description": "The id of the destination metro" + }, + "destCompany": { + "type": "string", + "description": "some other description here" + }, + "destPortId": { + "type": "string", + "description": "The port id of the connection z-end" + }, + "paymentType": { + "type": "string", + "enum": ["creditcard", "invoice"], + "description": "The payment method" + }, + "partner": { + "type": "object", + "properties": { + "destPortIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "account": { + "type": "string", + "description": "The account number/id for the CLOUD partner account" + } + } + } + } + }, + "EdgeQuotePayload": { + "type": "object", + "properties": { + "country": { + "description": "The quoted country", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The country's name" + }, + "iso": { + "type": "string", + "description": "The country's alpha-2 code" + } + } + }, + "bandwidth": { + "description": "The bandwidth value for the quote", + "type": "string" + }, + "bandwidthUnit": { + "description": "The bandwidth unit for the quote. Mbps or Gbps", + "type": "string" + }, + "contract-term": { + "description": "The contract term value for the quote", + "type": "string" + }, + "contractTermUnit": { + "description": "The contract term unit for the quote", + "type": "string" + }, + "formatted-address": { + "description": "A valid address format retrieved from Google Places API search.", + "type": "string" + }, + "postCode": { + "description": "Postcode used in address when a Singapore location is choosen.", + "type": "string", + "nullable": true + }, + "withMetro": { + "description": "Include metro details for the Quote/Order", + "type": "boolean", + "default": true + } + }, + "required": [ + "country", + "bandwidth", + "bandwidthUnit", + "contractTermUnit", + "formatted-address", + "contract-term" + ], + "example": { + "country": { + "name": "Hong Kong", + "iso": "HK" + }, + "bandwidth": "200", + "bandwidthUnit": "Mbps", + "contract-term": "12", + "contractTermUnit": "month", + "formatted-address": "Example address, Hongkong", + "postCode": "", + "withMetro": true + } + }, + "EdgePriceResponseV2": { + "type": "object", + "properties": { + "responseId": { + "description": "To be deprecated as it has no use. Client already knows of this value to begin with", + "type": "string" + }, + "status": { + "description": "The state of the quote request. It can have the value of 'PROCESSING' or 'READY'", + "type": "string" + }, + "formatted-address": { + "description": "Appears when status is 'READY'. [To be deprecated. use the value inside addressResult instead]", + "type": "string" + }, + "addressResult": { + "description": "This is available only when status is 'READY'", + "type": "object", + "properties": { + "city": { + "description": "The quoted city", + "type": "string" + }, + "country": { + "description": "The quoted country", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The country's name" + }, + "iso": { + "type": "string", + "description": "The country's alpha-2 code" + } + } + }, + "formattedAddress": { + "description": "The formatted address that was provided from the Google Maps API search result", + "type": "string" + }, + "latitude": { + "description": "Latitude of address", + "type": "string" + }, + "longitude": { + "description": "Longitude of address", + "type": "string" + } + } + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "displayName": { + "description": "The display name", + "type": "string" + }, + "bandwidth": { + "description": "The bandwidth value", + "type": "string" + }, + "bandwidthUnit": { + "description": "The bandwidth unit", + "type": "string" + }, + "contractTerm": { + "description": "The contract term value", + "type": "string" + }, + "contractTermUnit": { + "description": "The contract term unit", + "type": "string" + }, + "hasXcc": { + "description": "Indicates if the service has XCC", + "type": "boolean" + }, + "remarks": { + "description": "The remarks", + "type": "string" + }, + "interval": { + "description": "The interval", + "type": "string" + }, + "lastMileProvider": { + "description": "The last mile provider value", + "type": "string" + }, + "lastMileProviderKey": { + "description": "The last mile provider code", + "type": "string" + }, + "quoteKey": { + "description": "The quotation reference key", + "type": "string" + }, + "mrc": { + "description": "The monthly recurring cost's amount", + "type": "string" + }, + "mrcCurrency": { + "description": "The monthly recurring cost's currency type", + "type": "string" + }, + "nrc": { + "description": "The non-recuring charge's cost amount", + "type": "string" + }, + "nrcCurrency": { + "description": "The non-recuring charge's currency type", + "type": "string" + }, + "tcv": { + "description": "The total contract value cost amount", + "type": "string" + }, + "tcvCurrency": { + "description": "The total contract value's currency type", + "type": "string" + }, + "trc": { + "description": "The total resource cost amount", + "type": "string" + }, + "trcCurrency": { + "description": "The total resource cost's currency type", + "type": "string" + }, + "shieldPortId": { + "description": "The shield port Id", + "type": "string" + }, + "vendorName": { + "description": "The vendor/provider's name", + "type": "string" + }, + "metro": { + "type": "object", + "properties": { + "id": { + "description": "The metro's id", + "type": "string" + }, + "name": { + "description": "The metro's name", + "type": "string" + }, + "country": { + "description": "The metro's alpha-2 country code", + "type": "string" + } + } + } + } + } + } + }, + "example": { + "formatted-address": "Example, Mong Kok, Hong Kong", + "addressResult": { + "city": "Mong Kok", + "country": { + "iso": "HK", + "name": "Hong Kong" + }, + "formattedAddress": "Example, Mong Kok, KO, Hong Kong", + "latitude": "22.3192238", + "longitude": "114.1693282" + }, + "data": [ + { + "bandwidth": "100", + "bandwidthUnit": "Mbps", + "contractTerm": "12", + "contractTermUnit": "month", + "displayName": "HKT", + "hasXcc": false, + "interval": "6 weeks", + "lastMileProvider": "Not Provided", + "lastMileProviderKey": "NOT_PROVIDED", + "mrc": "166.45", + "mrcCurrency": "USD", + "nrc": "0.00", + "nrcCurrency": "USD", + "quoteKey": "00000000-0000-0000-0000-8b6f5889f379", + "remarks": "-", + "shieldPortId": "000000000000000015a80d6c", + "tcv": "1997.40", + "tcvCurrency": "USD", + "trc": "1997.40", + "trcCurrency": "USD", + "vendorName": "HKT", + "metro": { + "id": "00000000000000003cddb6d1", + "name": "Hong Kong", + "country": "hk" + } + } + ], + "responseId": "00000000-0000-0000-0000-393de477503f", + "status": "READY" + } + }, + "CreateEdgePortPayload": { + "required": ["portName", "speed", "paymentType", "edgePayload"], + "properties": { + "portName": { + "description": "The name of the port", + "type": "string" + }, + "speed": { + "description": "The port speed in Mbps. Must be >= 100.", + "type": "string" + }, + "paymentType": { + "description": "paymentType invoice is the only one currently supported", + "type": "string", + "default": "invoice" + }, + "edgePayload": { + "description": "Includes all edge related informations, form params etc.", + "type": "object", + "required": [ + "country", + "formattedAddress", + "interval", + "latitude", + "longitude", + "quoteKey", + "siteContacts" + ], + "properties": { + "country": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The country's name" + }, + "iso": { + "type": "string", + "description": "The country's alpha-2 code" + } + } + }, + "metro": { + "type": "object", + "properties": { + "id": { + "description": "The metro's id", + "type": "string" + }, + "name": { + "description": "The metro's name", + "type": "string" + }, + "country": { + "description": "The metro's alpha-2 country code", + "type": "string" + } + } + }, + "bandwidth": { + "type": "string" + }, + "bandwidthUnit": { + "type": "string" + }, + "contractTerm": { + "type": "string" + }, + "contractTermUnit": { + "type": "string" + }, + "displayName": { + "type": "string" + }, + "hasXcc": { + "type": "boolean" + }, + "formattedAddress": { + "type": "string" + }, + "interval": { + "type": "string" + }, + "latitude": { + "type": "string" + }, + "longitude": { + "type": "string" + }, + "lastMileProvider": { + "type": "string" + }, + "lastMileProviderKey": { + "type": "string" + }, + "quoteKey": { + "type": "string" + }, + "mrc": { + "type": "string" + }, + "mrcCurrency": { + "type": "string" + }, + "nrc": { + "type": "string" + }, + "nrcCurrency": { + "type": "string" + }, + "remarks": { + "type": "string" + }, + "shieldPortId": { + "type": "string" + }, + "tcv": { + "type": "string" + }, + "tcvCurrency": { + "type": "string" + }, + "trc": { + "type": "string" + }, + "trcCurrency": { + "type": "string" + }, + "vendorName": { + "type": "string" + }, + "siteContacts": { + "type": "object", + "required": [ + "primarySiteContactName", + "primarySitePhonePrefix", + "primarySiteContactPhone", + "primarySiteContactEmail", + "demarcationPoint", + "siteAccess" + ], + "properties": { + "primarySiteContactName": { + "description": "Name of the primary contact person", + "type": "string" + }, + "primarySitePhonePrefix": { + "description": "Phone/mobile number country code of the primary contact person", + "type": "string" + }, + "primarySiteContactPhone": { + "description": "Phone/mobile number of the primary contact person", + "type": "string" + }, + "primarySiteContactEmail": { + "description": "Email address of the primary contact person", + "type": "string" + }, + "secondarySiteContactName": { + "description": "Name of the secondary contact person", + "type": "string" + }, + "secondarySitePhonePrefix": { + "description": "Phone/mobile number country code of the secondary contact person", + "type": "string", + "nullable": true + }, + "secondarySiteContactPhone": { + "description": "Phone/mobile number of the secondary contact person", + "type": "string", + "nullable": true + }, + "secondarySiteContactEmail": { + "description": "Email address of the secondary contact person", + "type": "string", + "nullable": true + }, + "demarcationPoint": { + "description": "Demarcation point for the port connection", + "type": "string" + }, + "siteAccess": { + "description": "Site access instructions or requirements", + "type": "string" + }, + "interfaceType": { + "description": "Ethernet interface type", + "type": "string", + "nullable": true + } + } + } + } + } + }, + "example": { + "portName": "PORT_1", + "speed": 500, + "paymentType": "invoice", + "edgePayload": { + "bandwidth": "100", + "bandwidthUnit": "Mbps", + "contractTerm": "12", + "contractTermUnit": "month", + "country": { + "iso": "HK", + "name": "Hong Kong" + }, + "displayName": "HKT", + "formattedAddress": "Example, Mong Kok, KO, Hong Kong", + "hasXcc": false, + "interval": "6 weeks", + "lastMileProvider": "Not Provided", + "lastMileProviderKey": "NOT_PROVIDED", + "latitude": "22.3192238", + "longitude": "114.1693282", + "metro": { + "country": "hk", + "id": "00000000000000000cddb6d1", + "name": "Hong Kong" + }, + "mrc": "166.45", + "mrcCurrency": "USD", + "nrc": "0.00", + "nrcCurrency": "USD", + "quoteKey": "00000000-0000-0000-0000-369915e261ac", + "remarks": "-", + "shieldPortId": "000000000000000000a80d6c", + "siteContacts": { + "demarcationPoint": "Building backdoor room A", + "interfaceType": null, + "primarySiteContactEmail": "jdelacruz@testmail.com", + "primarySiteContactName": "Create Order Test", + "primarySiteContactPhone": "09171234567", + "primarySitePhonePrefix": "+852", + "secondarySiteContactEmail": null, + "secondarySiteContactName": null, + "secondarySiteContactPhone": null, + "secondarySitePhonePrefix": null, + "siteAccess": "Please present your badge and register at the lobby. Contact the primary contact person on arrival" + }, + "tcv": "1997.40", + "tcvCurrency": "USD", + "trc": "1997.40", + "trcCurrency": "USD", + "vendorName": "HKT" + } + } + }, + "EdgeOrderResponse": { + "properties": { + "id": { + "type": "string" + }, + "portName": { + "type": "string" + }, + "speed": { + "properties": { + "value": { + "type": "number" + }, + "name": { + "type": "string" + } + } + }, + "paymentType": { + "type": "string", + "default": "invoice" + }, + "discountId": { + "type": "string" + }, + "billingId": { + "type": "string" + }, + "externalId": { + "type": "string" + }, + "salesRecordId": { + "type": "string" + }, + "paymentTransactionId": { + "type": "string" + }, + "payg": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "reserved", + "created", + "processing", + "pending", + "allocated", + "loa_sent", + "setup_xc", + "done", + "cancelling", + "cancelled", + "error" + ] + }, + "isEdgePort": { + "type": "boolean", + "default": true + }, + "cancelled": { + "type": "boolean" + }, + "requestSource": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "tags": { + "type": "array" + }, + "type": { + "type": "string", + "default": "PHYSICAL" + }, + "isManualCreate": { + "type": "boolean", + "default": false + }, + "isManagedEdgePort": { + "type": "boolean", + "default": false + }, + "dataCenterFacilityId": { + "type": "string" + }, + "metroId": { + "type": "string" + }, + "companyId": { + "type": "string" + }, + "crossConnectId": { + "type": "string" + }, + "deleted": { + "type": "string", + "default": false + }, + "deletedAt": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "company": { + "type": "object" + }, + "dataCenterFacility": { + "type": "object" + }, + "metro": { + "type": "object", + "properties": { + "id": { + "description": "The metro's id", + "type": "string" + }, + "name": { + "description": "The metro's name", + "type": "string" + }, + "country": { + "description": "The metro's alpha-2 country code", + "type": "string" + } + } + }, + "capabilities": { + "type": "object" + }, + "edgePayload": { + "type": "object" + } + }, + "example": { + "id": "0000000000000000356c6643", + "portName": "PORT_1", + "speed": { + "value": 500, + "name": "500 Mbps" + }, + "paymentType": "invoice", + "discountId": null, + "billingId": "0000000000000000356c1234", + "externalId": null, + "salesRecordId": null, + "paymentTransactionId": null, + "payg": true, + "status": "created", + "loaStatus": "TODO", + "isEdgePort": true, + "cancelled": false, + "requestSource": "SAMPLE_APP", + "createdBy": "jdelacruz", + "tags": [], + "type": "PHYSICAL", + "isManualCreate": false, + "isManagedEdgePort": false, + "dataCenterFacilityId": "000000000000000000fa1234", + "metroId": "00000000000000000cdd1234", + "companyId": "0000000000000042ae961234", + "crossConnectId": null, + "deleted": false, + "deletedAt": null, + "createdAt": "2025-04-02T07:58:57.575Z", + "updatedAt": "2025-04-02T07:58:57.949Z", + "company": { + "system": { + "welcomeMessage": null + }, + "company": { + "companySize": null, + "dateFounded": null, + "clientId": null, + "first": null, + "last": null, + "address": null, + "city": null, + "state": null, + "zip": null, + "phone": null, + "fax": null, + "addresses": [ + { + "geo": { + "type": "Point", + "coordinates": [] + }, + "registered": false, + "address": "Sample Address", + "city": "Sample City", + "state": null, + "zip": null, + "country": "US", + "email": null, + "phone": null + } + ], + "partnerType": null, + "businessType": "Enterprise", + "registeredName": "Sample Company", + "website": "1.com", + "isIoTDemoCompany": false, + "industry": "the arts", + "primaryNoc": [] + }, + "cloudProviderDetails": { + "asn": { + "range": [] + }, + "bgpAuthority": "PCCWGLOBAL", + "companyType": "DCP" + }, + "stats": { + "articles": 0, + "events": 0, + "followers": 0, + "following": 7, + "interconnections": 0, + "members": 49, + "posts": 0, + "privateArticles": 0, + "privateEvents": 0, + "privatePosts": 0 + }, + "l1Attributes": { + "portSpeeds": [] + }, + "avatarId": null, + "background": null, + "headline": null, + "country": null, + "summary": null, + "location": null, + "accountManagerEmail": null, + "accountManagerId": null, + "username": "sample-company", + "name": "Sample Company", + "type": "COMPANY", + "overviewImage": "00000000000036b128f4015b", + "categories": ["Enterprise"], + "portsActive": 32, + "businessRegistrationNumber": "123321", + "bundleCrossConnectChargeId": null, + "deletedAt": null, + "tags": [], + "createdAt": "2024-01-15T08:49:16.823Z", + "updatedAt": "2025-04-02T06:48:38.491Z", + "deleted": false, + "displayOrder": -299, + "groups": [], + "isCloudProvider": false, + "status": "ACTIVE", + "verified": true, + "verifiedIdentity": true, + "billingAccount": "140277", + "signedCompanyRefId": 3, + "signedCompanyVerified": true, + "selectiveQinQTunnelProvider": [], + "isPublicL2Provider": false, + "companies": [], + "id": "0000000000000042ae961234", + "online": false + }, + "dataCenterFacility": { + "system": { + "welcomeMessage": null + }, + "company": { + "privacy": { + "network": { + "mode": "PUBLIC", + "blackListIds": [], + "whiteListIds": [] + }, + "community": { + "mode": "PUBLIC", + "blackListIds": [], + "whiteListIds": [] + } + }, + "partnerType": null, + "website": "consoleconnect.com", + "emailDomains": [], + "industry": null, + "businessType": null, + "companySize": null, + "dateFounded": null, + "registeredName": null, + "businessRegistrationCertReference": null, + "businessRegistrationCertUploadedAt": null, + "businessRegistrationCertVerified": "UNVERIFIED", + "businessRegistrationCertRejectedReason": null, + "regionalInternetRegistry": [], + "clientId": null, + "first": null, + "last": null, + "address": null, + "city": null, + "state": null, + "zip": null, + "addresses": [ + { + "geo": { + "type": "Point", + "coordinates": ["22.286685943603516", "114.2105712890625"] + }, + "registered": false, + "address": "Example Address", + "city": "Hong Kong", + "state": null, + "zip": null, + "country": "HK", + "email": "sample@email.com", + "phone": null + }, + { + "geo": { + "type": "Point", + "coordinates": ["22.286685943603516", "114.2105712890625"] + }, + "registered": false, + "address": "Example Address", + "city": "Hong Kong", + "state": null, + "zip": null, + "country": "HK", + "email": "sample@email.com", + "phone": null + }, + { + "geo": { + "type": "Point", + "coordinates": ["22.286685943603516", "114.2105712890625"] + }, + "primary": true, + "registered": false, + "address": "Example Address", + "city": "Hong Kong", + "state": null, + "zip": null, + "country": "CN", + "email": "sample@email.com", + "phone": null + } + ], + "phone": null, + "fax": null, + "businessDevelopmentManagerTypePreference": "UNSPECIFIED", + "isIoTDemoCompany": false, + "primaryNoc": [] + }, + "dataCenterFacility": { + "id": null, + "ready": true, + "metroId": "000000000000906f3cdd1234", + "speeds": [ + { + "name": "1000 Mbps", + "value": 1000 + } + ], + "airportCodes": [], + "nniReady": true, + "brandId": "000000000000000000ae1234", + "canBundleCrossConnect": false + }, + "cloudProviderDetails": { + "asn": { + "range": [] + }, + "companyType": "DCP", + "bgpAuthority": "SAMPLEAUTHORITY" + }, + "stats": { + "posts": 0, + "events": 0, + "articles": 0, + "privatePosts": 0, + "privateEvents": 0, + "privateArticles": 0, + "following": 0, + "followers": 0, + "interconnections": 0, + "members": 0 + }, + "l1Attributes": { + "portSpeeds": [] + }, + "country": null, + "businessRegistrationNumber": null, + "accountManagerEmail": null, + "accountManagerId": null, + "type": "SAMPLE_TYPE", + "name": "Console EDGE - Test DCF", + "avatarId": null, + "background": null, + "overviewImage": null, + "headline": null, + "summary": null, + "location": null, + "groups": [], + "displayOrder": -299, + "status": "ACTIVE", + "tags": ["sample tags"], + "categories": [], + "verified": true, + "verifiedIdentity": true, + "deleted": false, + "deletedAt": null, + "isCloudProvider": false, + "popIds": ["00000000-0000-0000-b59b-2sd231233s"], + "nnis": null, + "signedCompanyRefId": null, + "username": "consoleedgedcf11112", + "costbookLocationId": "00000000000003000a4f1234", + "bundleCrossConnectChargeId": null, + "updatedAt": "2025-02-12T15:45:22.067Z", + "createdAt": "2023-01-23T06:46:21.814Z", + "provider": ["PCCWGLOBAL"], + "destinationPortOnly": false, + "l3CostbookLocationId": "0000000000000000150f1234", + "signedCompanyVerified": false, + "selectiveQinQTunnelProvider": [], + "isPublicL2Provider": false, + "companies": [], + "id": "000000000000000005fa50ff", + "online": false + }, + "metro": { + "name": "Hong Kong", + "code": "HKG", + "logo": null, + "canCreateController": false, + "tags": [], + "description": "a", + "country": "hk", + "rir": "APNIC", + "regionIds": ["000000000000006cc30f1234"], + "ready": true, + "id": null, + "deletedAt": null, + "createdAt": "2017-12-18T00:45:44.120Z", + "updatedAt": "2025-01-13T03:06:15.474Z", + "deleted": false + }, + "capabilities": {}, + "edgePayload": { + "bandwidth": "100", + "bandwidthUnit": "Mbps", + "contractTerm": "12", + "contractTermUnit": "month", + "formattedAddress": "Example Address, Hong Kong", + "interval": "6 weeks", + "lastMileProvider": "Not Provided", + "lastMileProviderKey": "NOT_PROVIDED", + "latitude": "22.3192238", + "longitude": "114.1693282", + "mrc": "166.45", + "mrcCurrency": "USD", + "nrc": "0.00", + "nrcCurrency": "USD", + "quoteKey": "a0000000-0000-0000-00000000915e21234", + "quoteValidityPeriod": "60", + "quoteValidityPeriodUnit": "DAY", + "readyServiceDate": "TBD", + "siteContacts": { + "demarcationPoint": "Building backdoor room A", + "interfaceType": null, + "primarySiteContactEmail": "jdelacruz@testmail.com", + "primarySiteContactName": "Create Order Test", + "primarySiteContactPhone": "09171234567", + "primarySitePhonePrefix": "+852", + "secondarySiteContactEmail": null, + "secondarySiteContactName": null, + "secondarySiteContactPhone": null, + "secondarySitePhonePrefix": null, + "siteAccess": "Please present your badge and register at the lobby. Contact the primary contact person on arrival" + }, + "trc": "1997.40", + "tcv": "1997.40", + "tcvCurrency": "USD", + "vendorName": "HKT" + } + } + }, + "CreateLayer2ConnectionSchema": { + "type": "object", + "title": "Standard L2 (port to port) connection.", + "properties": { + "type": { + "type": "string", + "description": "The connection type, typically \"LAYER_2\".", + "enum": ["LAYER2"] + }, + "name": { + "type": "string", + "description": "The name of the new connection." + }, + "portId": { + "type": "string", + "description": "The source port ID." + }, + "destPortId": { + "type": "string" + }, + "regionId": { + "type": "string" + }, + "destRegionId": { + "type": "string" + }, + "destDcf": { + "type": "string" + }, + "speed": { + "type": "number", + "description": "The port speed in Mbps." + }, + "destMetroId": { + "type": "string", + "description": "The ID of the destination metro." + }, + "destCompany": { + "type": "string", + "description": "The username of the destination company." + }, + "paymentType": { + "type": "string", + "enum": ["creditcard", "invoice"], + "description": "The PAYG payment type." + }, + "duration": { + "type": "number" + }, + "durationUnit": { + "type": "string", + "description": "The duration unit for the connection ('d', 'w', 'm', 'y')." + }, + "evergreen": { + "type": "boolean", + "description": "Set this to `true` for the connection and payment to continue on a month-to-month basis at the end of your selected duration. Otherwise, set this to `false`." + }, + "classOfService": { + "type": "string", + "enum": ["GOLD", "SILVERPLUS", "SILVER", "BRONZE"] + }, + "srcVlanRequest": { + "type": "number", + "nullable": true + }, + "destVlanRequest": { + "type": "number", + "nullable": true + }, + "discountCode": { + "type": "string" + } + }, + "required": [ + "type", + "name", + "portId", + "speed", + "destPortId", + "destMetroId", + "destCompany", + "paymentType", + "duration", + "durationUnit", + "classOfService" + ] + }, + "UpdateLayer2ConnectionSchema": { + "title": "Edit connection.", + "description": "This is used for both connection requests and regular connection edits. Fields only used in connection requests (`connection.status: pending`) have the description preprended with *Connection request*.", + "type": "object", + "properties": { + "speed": { + "description": "Speed in Mbps. You can set any speed while the connection request is PENDING. After the connection has been accepted by both parties, the connection speed can be _reduced_ at any time, but may not be _increased_ without a change request.", + "type": "number", + "minimum": 1 + }, + "name": { + "description": "Friendly name for this connection. This is specific to your company, however when first creating a connection request this name will set for bot your company and the destination company.", + "type": "string" + }, + "portId": { + "description": "Connection request: Port ID to use for this connection. If changing the controller would change the cdrBillingType for the other person, they will need to approve this connection request again.", + "type": "string" + }, + "untagged": { + "description": "Connection request: Whether this connection should be untagged.", + "type": "boolean" + }, + "destUntagged": { + "description": "Connection request: Whether the destination should be untagged. Only used for self-connection.", + "type": "boolean" + }, + "destPortId": { + "description": "Connection request: Dest port ID to use for a self-connection.", + "type": "string" + }, + "controllerId": { + "description": "Connection request: Controller ID to use for this connection. Only allowed on Layer 3 connections. If changing the controller would change the cdrBillingType for the other person, they will need to approve this connection request again.", + "type": "string" + }, + "destControllerId": { + "description": "Connection request: Dest controller ID to use for a self-connection.", + "type": "string" + } + } + }, + "LogModel": { + "example": { + "results": [ + { + "timestamp": "2016-07-17T23:14:36.853Z", + "connection": { + "id": "55783e39519d254d36f6126e", + "speed": { + "value": 200, + "name": "200 Mbps" + }, + "status": "ACTIVE", + "name": "International link" + }, + "user": { + "id": "58980a25a77b4d7bf459d100", + "name": "Stan", + "username": "stan", + "type": "PERSON", + "groups": [], + "location": null, + "summary": null, + "headline": null, + "background": null, + "avatarId": null, + "overviewImage": null, + "categories": [], + "isCloudProvider": false, + "cloudProviderDetails": { + "asn": { + "range": [] + }, + "bgpAuthority": "PCCWGLOBAL", + "companyType": "DCP" + }, + "online": false, + "isFollowing": false, + "isFollowee": false, + "__v": 0, + "stats": { + "members": 0, + "interconnections": 0, + "followers": 0, + "following": 0, + "privateArticles": 0, + "privateEvents": 0, + "privatePosts": 0, + "articles": 0, + "events": 0, + "posts": 0 + }, + "displayOrder": -299, + "system": { + "welcomeMessage": null + }, + "deletedAt": null, + "deleted": false, + "verified": false, + "verifiedIdentity": false, + "tags": [], + "status": "ACTIVE", + "companies": [], + "linkUserCompany": {}, + "signedCompanyRefId": null + } + } + ] + } + }, + "AlibabaDirectConnectRespModel": { + "type": "object", + "properties": { + "destPortId": { + "type": "string", + "example": "60c16817ce2d6d0014fb37aa" + }, + "srcCompanyId": { + "type": "string", + "example": "5da6e1c97f37e5000b3a3dda" + }, + "destCompanyId": { + "type": "string", + "example": "5bb599948f3862000a43dabe" + }, + "version": { + "type": "integer", + "example": 2 + }, + "srcRegionId": { + "type": "string", + "example": "" + }, + "destRegionId": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "Alibaba API Connection" + }, + "speed": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "example": 10 + }, + "name": { + "type": "string", + "example": "10 Mbps" + } + } + }, + "status": { + "type": "string", + "enum": ["CREATING"] + }, + "type": { + "type": "string", + "example": "GROUP_LAYER2" + }, + "paymentType": { + "type": "string", + "example": "invoice" + }, + "billingType": { + "type": "string", + "example": "PAYG" + }, + "classOfService": { + "type": "string", + "example": "SILVER" + }, + "payg": { + "type": "boolean", + "example": true + }, + "paymentTransactionId": { + "type": "string", + "nullable": true, + "example": null + }, + "networkAutomation": { + "type": "object", + "additionalProperties": false + }, + "parentId": { + "type": "string", + "nullable": true, + "example": null + }, + "partner": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "ALICLOUD" + }, + "speed": { + "type": "integer", + "example": 50 + }, + "crossconnectionStatus": { + "type": "string", + "example": "DISABLED" + }, + "provisioningStatus": { + "type": "string", + "example": "NOTPROVISIONED" + }, + "status": { + "type": "string", + "example": "PROVISIONING" + }, + "account": { + "type": "string", + "example": "5782827885201016" + }, + "destPortIds": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "60c16817ce2d6d0014fb37aa", + "60c16a81df85490014677de9" + ] + } + } + }, + "duration": { + "type": "integer", + "example": 1 + }, + "durationUnit": { + "type": "string", + "example": "m" + }, + "srcUntagged": { + "type": "boolean", + "example": false + }, + "destUntagged": { + "type": "boolean", + "example": false + }, + "srcQinQ": { + "type": "boolean", + "example": false + }, + "destQinQ": { + "type": "boolean", + "example": false + }, + "cdrBillingType": { + "type": "string", + "example": "METRO" + }, + "activeChangedAt": { + "type": "string", + "format": "date-time", + "nullable": true, + "example": null + }, + "firstActiveAt": { + "type": "string", + "format": "date-time", + "nullable": true, + "example": null + }, + "salesRecordId": { + "type": "string", + "nullable": true, + "example": null + }, + "maintenanceMode": { + "type": "boolean", + "example": false + }, + "ixPartner": { + "type": "object", + "additionalProperties": false + }, + "discountId": { + "type": "string", + "nullable": true, + "example": null + }, + "request": { + "type": "object" + }, + "srcVlan": { + "type": "object" + }, + "destVlan": { + "type": "object" + }, + "srcConfigTag": { + "type": "string", + "nullable": true, + "example": null + }, + "destConfigTag": { + "type": "string", + "nullable": true, + "example": null + }, + "subconnectionIds": { + "type": "object", + "properties": { + "primary": { + "type": "array", + "items": { + "type": "string" + }, + "example": ["679cd6f806c63a8d05b420f4"] + }, + "secondary": { + "type": "array", + "items": { + "type": "string" + }, + "example": ["679cd6f806c63a8d05b420f5"] + } + } + }, + "importedAt": { + "type": "string", + "format": "date-time", + "nullable": true, + "example": null + }, + "statusChangedAt": { + "type": "string", + "format": "date-time", + "example": "2025-01-31T13:58:16.685Z" + }, + "srcVlanRequest": { + "type": "string", + "nullable": true, + "example": null + }, + "requestSource": { + "type": "string", + "example": "CONSOLE_API" + }, + "id": { + "type": "string", + "example": "679cd6f806c63a8d05b420f6" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "example": "2025-01-31T13:58:16.686Z" + }, + "updatedAt": { + "type": "string", + "format": "date-time", + "example": "2025-01-31T13:58:16.706Z" + }, + "deletedAt": { + "type": "string", + "format": "date-time", + "nullable": true, + "example": null + }, + "deleted": { + "type": "boolean", + "example": false + }, + "srcPortId": { + "type": "string", + "example": "5db8560f129550000b8d08c6" + }, + "typeFriendly": { + "type": "string", + "example": "Alicloud Direct Connect" + }, + "isReceiver": { + "type": "boolean", + "example": false + }, + "isCreator": { + "type": "boolean", + "example": true + }, + "subconnections": { + "type": "array", + "items": { + "type": "object" + } + }, + "destPort": { + "type": "object" + }, + "destCompany": { + "type": "object" + }, + "srcCompany": { + "type": "object" + } + } + }, + "Package": { + "type": "string", + "enum": ["alwayson", "ondemand"] + }, + "NumberOfProtectedIpsInQuery": { + "type": "string", + "example": "1,8", + "description": "Number of IPv4 address prefixes to be protected. Comma separated list of minimum and maximum range.", + "enum": ["1,8", "9,16", "17,32", "33,64"] + }, + "TotalMitigatedTraffic": { + "type": "integer", + "description": "DDoS attack traffic to be mitigated, in Mbps.", + "example": 50, + "enum": [20, 50, 100] + }, + "BasicTerminationSite": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "Reading Site" + }, + "type": { + "type": "string", + "enum": ["headquarters", "datacentre", "branch"], + "example": "headquarters" + }, + "country_code": { + "type": "string", + "example": "GB" + }, + "street_address": { + "type": "string", + "example": "6-8 Market Place" + }, + "city": { + "type": "string", + "example": "Reading" + }, + "county": { + "type": "string", + "example": "Berkshire" + }, + "post_code": { + "type": "string", + "example": "RG1 3TE" + } + } + }, + "ReturnedTerminationSite": { + "allOf": [ + { + "type": "object", + "properties": { + "id": { + "type": "integer", + "example": 1 + } + } + }, + { + "$ref": "#/components/schemas/BasicTerminationSite" + }, + { + "type": "object", + "properties": { + "time_created": { + "type": "string", + "description": "Exact date and time the order was created.", + "example": "2020-11-18T14:34:53.246Z" + } + } + } + ] + }, + "Site": { + "type": "object", + "properties": { + "site_id": { + "type": "integer" + }, + "country_id": { + "type": "string" + }, + "country_name": { + "type": "string" + }, + "city": { + "type": "string" + }, + "city_name": { + "type": "string" + }, + "site_bdm": { + "type": "string" + }, + "site_bdm_name": { + "type": "string" + } + } + }, + "SalesLink": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "type_name": { + "type": "string" + }, + "data_rate": { + "type": "string" + }, + "data_rate_unit": { + "type": "string" + }, + "burst": { + "type": "string" + }, + "burst_rate_unit": { + "type": "string" + }, + "from_site": { + "$ref": "#/components/schemas/Site" + }, + "to_site": { + "$ref": "#/components/schemas/Site" + } + } + }, + "SalesRecord": { + "type": "object", + "properties": { + "external_id": { + "type": "integer" + }, + "sr_id": { + "type": "integer" + }, + "so_id": { + "type": "integer" + }, + "sp_id": { + "type": "integer" + }, + "rfq_request_id": { + "type": "integer" + }, + "rfq_component_id": { + "type": "integer" + }, + "cust_id": { + "type": "string" + }, + "cust_name": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_family": { + "type": "string" + }, + "product_type": { + "type": "string" + }, + "product_desc": { + "type": "string" + }, + "provisioning_in_name": { + "type": "string" + }, + "segment": { + "type": "string" + }, + "sale_status_id": { + "type": "string" + }, + "sale_status_name": { + "type": "string" + }, + "signed_region_name": { + "type": "string" + }, + "signed_bdm": { + "type": "string" + }, + "signed_bdm_name": { + "type": "string" + }, + "signed_bdm_region": { + "type": "string" + }, + "sales_bdm": { + "type": "string" + }, + "sales_bdm_name": { + "type": "string" + }, + "completion_delay_reason": { + "type": "string" + }, + "region_service_manager": { + "type": "string" + }, + "region_service_manager_name": { + "type": "string" + }, + "region_service_manager2": { + "type": "string" + }, + "region_service_manager2_name": { + "type": "string" + }, + "salesman_code": { + "type": "string" + }, + "partner_id": { + "type": "string" + }, + "circuit_id": { + "type": "string" + }, + "prev_circuit_id": { + "type": "string" + }, + "next_circuit_id": { + "type": "string" + }, + "related_sr_id": { + "type": "string" + }, + "service_id": { + "type": "string" + }, + "circuit_prefix": { + "type": "string" + }, + "project_manager": { + "type": "string" + }, + "project_manager_name": { + "type": "string" + }, + "project_manager2": { + "type": "string" + }, + "project_manager2_name": { + "type": "string" + }, + "engineer": { + "type": "string" + }, + "engineer_name": { + "type": "string" + }, + "engineer2": { + "type": "string" + }, + "engineer2_name": { + "type": "string" + }, + "cascade_provisioning": { + "type": "string" + }, + "competitor_identity": { + "type": "string" + }, + "provisioning_in": { + "type": "string" + }, + "switch": { + "type": "string" + }, + "sales_remark": { + "type": "string" + }, + "tech_remark": { + "type": "string" + }, + "gsmp_circuit_id": { + "type": "string" + }, + "dragon_service_id": { + "type": "string" + }, + "customer_ref_no": { + "type": "string" + }, + "order_create_date": { + "type": "string" + }, + "initial_contact_date": { + "type": "string" + }, + "target_close_date": { + "type": "string" + }, + "hot_prospect_date": { + "type": "string" + }, + "sales_close_date": { + "type": "string" + }, + "provision_start_date": { + "type": "string" + }, + "provision_end_date": { + "type": "string" + }, + "customer_requested_target_complete_date": { + "type": "string" + }, + "project_complete_date": { + "type": "string" + }, + "operation_date": { + "type": "string" + }, + "billing_date": { + "type": "string" + }, + "termination_date": { + "type": "string" + }, + "contract_renew_date": { + "type": "string" + }, + "onetime_commission_date": { + "type": "string" + }, + "drop_date": { + "type": "string" + }, + "cancel_date": { + "type": "string" + }, + "free_trial_day": { + "type": "string" + }, + "signed_company_id": { + "type": "string" + }, + "signed_company_name": { + "type": "string" + }, + "signed_region": { + "type": "string" + }, + "renew_option": { + "type": "string" + }, + "renew_option_desc": { + "type": "string" + }, + "renew_month": { + "type": "string" + }, + "billing_platform": { + "type": "string" + }, + "onetime_revenue": { + "type": "string" + }, + "onetime_gm": { + "type": "string" + }, + "onetime_gm_percent": { + "type": "string" + }, + "monthly_revenue": { + "type": "string" + }, + "monthly_gm": { + "type": "string" + }, + "monthly_gm_percent": { + "type": "string" + }, + "equip_cost": { + "type": "string" + }, + "tcv": { + "type": "string" + }, + "sales_links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SalesLink" + } + }, + "ma_id": { + "type": "array", + "items": { + "type": "integer" + } + }, + "creation_type": { + "type": "string" + }, + "verification_status": { + "type": "string" + }, + "contract_length": { + "type": "string" + }, + "contract_length_unit": { + "type": "string" + }, + "pending_date": { + "type": "string" + }, + "stop_pending_date": { + "type": "string" + }, + "pending_reason": { + "type": "string" + } + } + }, + "NumberOfProtectedIps": { + "type": "array", + "example": [1, 8], + "enum": [ + [1, 8], + [9, 16], + [17, 32], + [33, 64] + ], + "description": "Number of IPv4 address prefixes to be protected. Array of minimum and maximum range.", + "minItems": 2, + "maxItems": 2 + }, + "TotalInboundTraffic": { + "type": "array", + "example": [51, 100], + "enum": [ + [0, 50], + [51, 100], + [101, 200], + [201, 500], + [501, 1000], + [1001, 2000] + ], + "description": "Corresponding Legitimate Traffic. Array of minimum and maximum range, in Mbps.", + "minItems": 2, + "maxItems": 2 + }, + "ServicePeriod": { + "type": "integer", + "enum": [12, 24], + "example": 12 + }, + "BasicOrder": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Provided by user", + "example": "Anti-DDoS October Order" + }, + "insight_customer_id": { + "type": "string", + "description": "Provided by JWT from Console Connect, e.g. AIN001, TAN006, IS0569, TOL, TATA. Must already be an existing customer on the Insight platform.", + "example": "AIN001" + }, + "package": { + "$ref": "#/components/schemas/Package" + }, + "number_of_protected_ips": { + "$ref": "#/components/schemas/NumberOfProtectedIps" + }, + "total_inbound_traffic": { + "$ref": "#/components/schemas/TotalInboundTraffic" + }, + "total_mitigated_traffic": { + "$ref": "#/components/schemas/TotalMitigatedTraffic" + }, + "service_period": { + "$ref": "#/components/schemas/ServicePeriod" + }, + "resources_behind": { + "type": "boolean", + "description": "Whether the cleaned traffic shall be delivered to your existing GIA circuit.", + "example": true + } + }, + "required": [ + "name", + "insight_customer_id", + "number_of_protected_ips", + "total_inbound_traffic", + "service_period", + "resources_behind", + "total_mitigated_traffic", + "package" + ] + }, + "InsightSrId": { + "type": "number", + "description": "Sales Record ID, generated via Insight when order is created", + "example": 10211 + }, + "Status": { + "type": "string", + "enum": [ + "new", + "readyforprovision", + "superseded", + "active", + "canceled", + "terminated" + ], + "example": "active" + }, + "ScrubbingCentre": { + "type": "string", + "enum": [ + "ashburn_us", + "frankfurt_de", + "hongkong_cn", + "singapore_sg", + "taiwan_tw" + ], + "description": "Associated Scrubbing Centre" + }, + "ProtectedIpAddresses": { + "type": "array", + "description": "IP address prefixes that will be protected by the Anti-DDoS service.", + "items": { + "type": "object", + "properties": { + "address": { + "type": "string", + "example": "203.203.14.0/24", + "description": "IP Address prefix; subnet /18 to /24 inclusive" + }, + "as_number": { + "type": "integer", + "example": 18042, + "description": "Autonomous System Number" + } + }, + "required": ["address", "as_number"] + } + }, + "CustomerPublicIp": { + "type": "string", + "description": "GRE Tunnel IP Address (Public). Used to build the GRE Tunnel.", + "example": "12.34.1.34/32" + }, + "PccwgPublicIp": { + "type": "string", + "description": "PCCWG GRE Tunnel IP (Public). Used to build the GRE Tunnel.", + "example": "103.13.2.122/32" + }, + "BgpPeeringAsNumber": { + "type": "integer", + "description": "BGP Peering Tunnel Autonomous System Number. Used to establish BGP session over GRE tunnel.", + "example": 553 + }, + "ProvisioningConfiguration": { + "type": "object", + "description": "This will only be present once the user has completed the Provisioning process and progressed this to a 'readyforprovision' order.", + "properties": { + "customer_public_ip": { + "$ref": "#/components/schemas/CustomerPublicIp" + }, + "pccwg_public_ip": { + "$ref": "#/components/schemas/PccwgPublicIp" + }, + "pccwg_private_ip": { + "type": "string", + "description": "PCCWG GRE tunnel IP (Private). Used to build the GRE Tunnel and establish BGP session over GRE tunnel. This field is generated internally; it is not submitted via the CAD form.", + "example": "103.14.2.23" + }, + "customer_private_ip": { + "type": "string", + "description": "Customer GRE tunnel IP (Private). Used to build the GRE Tunnel and establish BGP session over GRE tunnel. This field is fetched/generated internally; it is not submitted via the CAD form.", + "example": "103.14.2.23" + }, + "mtu_size": { + "type": "integer", + "description": "Maximum Transmission Unit (bytes). Used to build the GRE tunnel during provisioning. This field is generated internally; it is not submitted via the CAD form.", + "example": 1460 + }, + "bgp_peering_as_number": { + "$ref": "#/components/schemas/BgpPeeringAsNumber" + }, + "bgp_password": { + "type": "string", + "description": "BGP session password. Used to establish BGP session over GRE tunnel. This field is generated internally; it is not submitted via the CAD form.", + "example": "p@55w0rd" + }, + "scrubbing_centre_as_number": { + "type": "integer", + "description": "Scrubbing Centre Autonomous System Number.", + "example": 837 + } + } + }, + "ReturnedOrder": { + "allOf": [ + { + "type": "object", + "properties": { + "id": { + "type": "integer", + "example": 1 + } + } + }, + { + "$ref": "#/components/schemas/BasicOrder" + }, + { + "type": "object", + "properties": { + "status": { + "$ref": "#/components/schemas/Status", + "example": "readyforprovision" + }, + "time_created": { + "type": "string", + "description": "Exact date and time the order was created.", + "example": "2020-11-18T14:34:53.246Z" + }, + "time_readyforprovision": { + "type": "string", + "description": "Exact date and time the provisioning process was completed, when the user submitted the network configuration info.", + "example": "2020-11-18T14:34:53.246Z" + }, + "insight_sr_id": { + "$ref": "#/components/schemas/InsightSrId" + }, + "insight_so_id": { + "type": "number", + "description": "Service Order ID, generated via Insight when order is created", + "example": 29283 + }, + "circuit_id": { + "type": "string", + "description": "Unique identifier for the order", + "example": "ASH(IPD) CAD901787" + }, + "scrubbing_centre": { + "$ref": "#/components/schemas/ScrubbingCentre" + }, + "protected_ip_addresses": { + "$ref": "#/components/schemas/ProtectedIpAddresses" + }, + "provisioning_config_active": { + "$ref": "#/components/schemas/ProvisioningConfiguration" + }, + "provisioning_config_standby": { + "$ref": "#/components/schemas/ProvisioningConfiguration" + }, + "termination_site_id": { + "type": "integer", + "description": "Internal database ID of the Termination Site used for this order", + "example": 44 + } + }, + "required": ["insight_so_id"] + } + ] + }, + "McaOrder": { + "type": "object", + "properties": { + "insight_customer_id": { + "type": "string", + "description": "Provided by JWT from Console Connect, e.g. AIN001, TAN006, IS0569, TOL, TATA. Must already be an existing customer on the Insight platform.", + "example": "AIN001" + }, + "uid": { + "type": "string", + "description": "Account uid to create the order", + "example": 123123412312341000 + }, + "cleanBandwidth": { + "type": "integer", + "description": "Clean bandwidth in Mbps, options provided by the attributes endpoint dynamically", + "example": 100 + }, + "subscription": { + "type": "integer", + "enum": [1, 2, 6, 12], + "description": "Service period in month(s)" + }, + "autoRenewal": { + "type": "boolean", + "description": "Whether the order should be automatically renewed", + "example": true + }, + "totalPrice": { + "type": "number", + "description": "Total price for the order, calculated by the cost endpoint", + "example": 1000 + }, + "technicalContactName": { + "type": "string", + "description": "Name of the technical contact for the order", + "example": "John Doe" + }, + "technicalContactPhoneNumber": { + "type": "string", + "description": "Phone number of the technical contact for the order", + "example": "123-456-7890" + }, + "technicalContactEmail": { + "type": "string", + "description": "Email of the technical contact for the order", + "example": "john.doe@example.com" + }, + "ruleName": { + "type": "string", + "description": "Name of acceleration rule, only allows alphabet, numbers and underscore", + "example": "MCA_Testing_Rule" + }, + "dnsInstanceId": { + "type": "string", + "description": "DNS Instance id to be binded by the acceleration rule", + "example": "ddos-abcdabcd-1234-1234-1234-aaaabbbbcccc" + }, + "autoSwitchback": { + "type": "boolean", + "description": "To prevent frequent traffic switchover for deactivating blackhole filtering.", + "example": true + }, + "switchbackTime": { + "type": "integer", + "description": "Time in seconds to switch back to original traffic path, value must be 0 when autoSwitchback===true, 30-120 when autoSwitchback===false", + "example": 0 + }, + "orderName": { + "type": "string", + "description": "Name for order, provided by user", + "example": "MCA Testing Order" + } + }, + "required": [ + "insight_customer_id", + "uid", + "cleanBandwidth", + "subscription", + "autoRenewal", + "totalPrice", + "technicalContactName", + "technicalContactPhoneNumber", + "technicalContactEmail", + "ruleName", + "dnsInstanceId", + "autoSwitchback", + "switchbackTime", + "orderName" + ] + }, + "InstanceId": { + "type": "string", + "description": "DNS Instance id to be binded by the acceleration rule", + "example": "ddos-abcdabcd-1234-1234-1234-aaaabbbbcccc" + }, + "SwitchbackTime": { + "type": "integer", + "description": "Time in seconds to switch back to original traffic path, value must be 0 when autoSwitchback===true, 30-120 when autoSwitchback===false", + "example": 0 + }, + "AccelerationRule": { + "type": "object", + "properties": { + "cname": { + "type": "string", + "description": "The CNAME of the acceleration rules.", + "example": "2131231.example001.com" + }, + "ruleName": { + "type": "string", + "description": "The name of the acceleration rules.", + "example": "example001" + }, + "rules": { + "type": "array", + "description": "There will be 3 item, one for MCA and one for DNS instance as in point (only one will active at a time), one for DNS instance out point.", + "items": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "enum": [0, 1], + "description": "The status of the acceleration rule, 0: disabled, 1: enabled." + }, + "valueType": { + "type": "integer", + "enum": [1, 3], + "description": "The type of instance, 1: DNS, 3: MCA." + }, + "value": { + "type": "string", + "description": "The ip of the instance." + }, + "restoreDelay": { + "$ref": "#/components/schemas/SwitchbackTime" + } + } + } + } + } + }, + "Uid": { + "type": "string", + "description": "Account uid to create the order", + "example": 123123412312341000 + }, + "RuleName": { + "type": "string", + "description": "Name of acceleration rule, only allows alphabet, numbers and underscore", + "example": "MCA_Testing_Rule" + }, + "AutoSwitchback": { + "type": "boolean", + "description": "To prevent frequent traffic switchover for deactivating blackhole filtering.", + "example": true + }, + "CreateAccelerationRuleRequestBody": { + "type": "object", + "properties": { + "uid": { + "$ref": "#/components/schemas/Uid" + }, + "ruleName": { + "$ref": "#/components/schemas/RuleName" + }, + "toInstanceId": { + "$ref": "#/components/schemas/InstanceId" + }, + "autoSwitchback": { + "$ref": "#/components/schemas/AutoSwitchback" + }, + "switchbackTime": { + "$ref": "#/components/schemas/SwitchbackTime" + } + }, + "required": [ + "uid", + "ruleName", + "toInstanceId", + "autoSwitchback", + "switchbackTime" + ] + }, + "ModifyAccelerationRuleRequestBody": { + "type": "object", + "properties": { + "toInstanceId": { + "$ref": "#/components/schemas/InstanceId" + }, + "autoSwitchback": { + "$ref": "#/components/schemas/AutoSwitchback" + }, + "switchbackTime": { + "$ref": "#/components/schemas/SwitchbackTime" + } + }, + "required": ["toInstanceId", "autoSwitchback", "switchbackTime"] + }, + "ProxyRule": { + "type": "object", + "properties": { + "ProxyPort": { + "type": "string", + "example": "443" + }, + "RealServers": { + "type": "array", + "items": { + "type": "string", + "example": "47.92.101.159" + } + } + } + }, + "Rule": { + "type": "object", + "properties": { + "ProxyType": { + "type": "string", + "example": "http" + }, + "ProxyRules": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProxyRule" + } + } + } + }, + "CreateWebRuleRequest": { + "type": "object", + "required": [ + "domain", + "ocsp", + "httpsExt", + "rules", + "instanceIds", + "cnameReused" + ], + "properties": { + "cnameReused": { + "type": "boolean", + "example": true + }, + "resourceGroupId": { + "type": "string", + "example": "" + }, + "domain": { + "type": "string", + "example": "example.com" + }, + "rsType": { + "type": "integer", + "example": 0 + }, + "defenseId": { + "type": "string", + "example": "" + }, + "ocsp": { + "type": "integer", + "enum": [0, 1], + "example": 1 + }, + "httpsExt": { + "type": "object", + "required": ["Http2", "Http2https", "Https2http"], + "properties": { + "Http2": { + "type": "integer", + "enum": [0, 1], + "example": 1 + }, + "Http2https": { + "type": "integer", + "enum": [0, 1], + "example": 1 + }, + "Https2http": { + "type": "integer", + "enum": [0, 1], + "example": 1 + } + } + }, + "rules": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/components/schemas/Rule" + } + }, + "instanceIds": { + "type": "array", + "minItems": 1, + "items": { + "type": "string", + "example": "ddos-a4a8adcd-e5bf-413e-91fc-022f303eb54f" + } + } + } + }, + "ProxyType": { + "type": "object", + "properties": { + "ProxyPorts": { + "type": "array", + "items": { + "type": "integer" + }, + "example": 80 + }, + "ProxyType": { + "type": "string", + "enum": ["http", "https"], + "example": "http" + } + } + }, + "HttpsExt": { + "type": "object", + "properties": { + "Http2": { + "type": "integer", + "description": "Flag indicating whether to use HTTP/2.", + "enum": [0, 1] + }, + "Http2https": { + "type": "integer", + "description": "Flag indicating whether to use HTTP/2 over HTTPS.", + "enum": [0, 1] + }, + "Https2http": { + "type": "integer", + "description": "Flag indicating whether to use HTTPS/2 over HTTP.", + "enum": [0, 1] + } + }, + "description": "Configuration options for HTTPS extensions." + }, + "ModifyWebRuleRequestBody": { + "type": "object", + "required": [ + "resourceGroupId", + "domain", + "proxyTypes", + "httpsExt", + "realServers", + "instanceIds", + "cnameReused" + ], + "properties": { + "resourceGroupId": { + "type": "string", + "example": "" + }, + "domain": { + "type": "string", + "format": "uri", + "example": "example.com" + }, + "proxyTypes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProxyType" + } + }, + "rsType": { + "type": "integer", + "example": 0 + }, + "httpsExt": { + "$ref": "#/components/schemas/HttpsExt" + }, + "realServers": { + "type": "array", + "minItems": 1, + "items": { + "type": "string", + "format": "ipv4", + "example": "1.1.1.1" + } + }, + "ocsp": { + "type": "integer", + "enum": [0, 1], + "example": 1 + }, + "instanceIds": { + "type": "array", + "minItems": 1, + "items": { + "type": "string", + "example": "ddos-3a1aaf10-5829-4ba6-bfc7-3ea950ed1234" + } + }, + "cnameReused": { + "type": "boolean", + "example": true + } + } + }, + "ConfigL7RsPolicyRequestBody": { + "type": "object", + "properties": { + "resourceGroupId": { + "type": "string", + "example": "" + }, + "domain": { + "type": "string", + "example": "example.com" + }, + "policy": { + "type": "object", + "properties": { + "ProxyMode": { + "type": "string", + "enum": ["ip_hash", "rr", "least_time"], + "example": "ip_hash" + }, + "Attributes": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": ["RealServer"], + "properties": { + "RealServer": { + "type": "string", + "example": "121.70.168.58" + }, + "Attribute": { + "type": "object", + "properties": { + "Weight": { + "type": "integer", + "description": "Only for ProxyMode = rr, must between 1 and 100", + "example": 80 + } + } + } + } + } + } + } + } + } + }, + "FunctionPlan": { + "type": "string", + "enum": ["standard", "enhanced"], + "example": "standard" + }, + "Provider": { + "type": "string", + "enum": ["ipdc", "dns"], + "example": "dns" + }, + "ResourceType": { + "type": "string", + "enum": ["pureweb", "mixture"], + "example": "pureweb" + }, + "DNSInstance": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "example": 3522 + }, + "circuit_id": { + "type": "string", + "example": "HKG(ABB) MPR948521" + }, + "function": { + "$ref": "#/components/schemas/FunctionPlan" + }, + "insight_customer_id": { + "type": "string", + "example": "ETT001" + }, + "insight_sr_id": { + "type": "string", + "example": "123141" + }, + "link": { + "type": "object", + "properties": { + "autoRenewal": { + "type": "boolean", + "example": false + }, + "createdAt": { + "type": "string", + "example": "2023-07-18 17:03:51" + }, + "createdBy": { + "type": "string", + "example": "ca8fd4aa-a509-43e5-aa32-8bd2926c9779" + }, + "createdByName": { + "type": "string", + "example": "Console Core Systems Engineering" + }, + "customer": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "5e99b3d343308a00142cd356" + } + } + }, + "expiredAt": { + "type": "string", + "example": "2023-08-19 00:00:00" + }, + "externalId": { + "type": "string", + "example": "ddosDip-sg-5r53b67eg0l" + }, + "externalIp": { + "type": "string", + "example": "170.33.13.112" + }, + "id": { + "type": "string", + "example": "ddos-7e072ab2-de5a-46a9-a597-e8c322bcc53f" + }, + "instanceType": { + "type": "object", + "properties": { + "migrationPlan": { + "type": "string", + "example": "Insurance" + }, + "protectionPackage": { + "type": "string", + "example": "Enhanced Function" + }, + "normalBandwidth": { + "type": "integer", + "example": 300 + }, + "cleanBandwidth": { + "type": "integer", + "example": 300 + }, + "cleanQPS": { + "type": "integer", + "example": 600 + }, + "newConnections": { + "type": "integer", + "example": 5000 + }, + "concurrentConnections": { + "type": "integer", + "example": 100000 + } + } + }, + "name": { + "type": "string", + "example": "Some DNS Instance" + }, + "protected": { + "type": "object", + "properties": { + "protectedPorts": { + "type": "object", + "properties": { + "usedNumber": { + "type": "integer", + "example": 1 + }, + "maxNumber": { + "type": "integer", + "example": 10 + } + } + }, + "protectedDomains": { + "type": "object", + "properties": { + "usedNumber": { + "type": "integer", + "example": 1 + }, + "maxNumber": { + "type": "integer", + "example": 20 + } + } + }, + "protectedSites": { + "type": "object", + "properties": { + "usedNumber": { + "type": "integer", + "example": 1 + }, + "maxNumber": { + "type": "integer", + "example": 2 + } + } + }, + "singleProtectBandwidthLimit": { + "type": "integer", + "example": 2015 + }, + "availableAdvancedMigrationSessionThisMonth": { + "type": "integer", + "example": 2 + } + } + }, + "provider": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "0b63baf5-65fc-479c-a316-8d224b0a3d66" + }, + "name": { + "type": "string", + "example": "Alibaba" + }, + "logo": { + "type": "string", + "example": "Alibaba" + } + } + }, + "state": { + "type": "string", + "example": "normal" + }, + "status": { + "type": "string", + "example": "ENABLED" + }, + "subscription": { + "type": "integer", + "example": 1 + }, + "uid": { + "type": "string", + "example": "292733187643212169" + }, + "updatedBy": { + "type": "string", + "example": "ca8fd4aa-a509-43e5-aa32-8bd2926c9779" + }, + "updatedByName": { + "type": "string", + "example": "Console Core Systems Engineering" + }, + "updatedAt": { + "type": "string", + "example": "2023-07-20 11:45:44" + } + } + }, + "name": { + "type": "string", + "example": "Some DNS Instance" + }, + "package": { + "$ref": "#/components/schemas/Package" + }, + "provider": { + "$ref": "#/components/schemas/Provider" + }, + "resource_type": { + "$ref": "#/components/schemas/ResourceType" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "synonym": { + "type": "string", + "example": "real-reseller" + }, + "vendor_account": { + "type": "string", + "example": "292733187643212169" + }, + "vendor_reference": { + "type": "string", + "example": "ddos-7e072ab2-de5a-46a9-a597-e8c322bcc53f" + } + } + }, + "DNSPortConfigList": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "instanceId": { + "type": "string", + "example": "ddos-a2dc76e8-bb13-4dab-91f9-28fafd4fc012" + }, + "name": { + "type": "string", + "example": "My-Order-01" + }, + "forwardingProtocol": { + "type": "string", + "enum": ["tcp", "idp"] + }, + "forwardingPort": { + "type": "string", + "example": 8024 + }, + "originServicePort": { + "type": "string", + "example": 8024 + }, + "forwardingMode": { + "type": "string", + "example": "Round-robin" + }, + "sessionPersistence": { + "type": "boolean", + "example": false + }, + "healthCheckStatus": { + "type": "boolean", + "example": false + }, + "protectionPolicy": { + "type": "boolean", + "example": false + }, + "deleted": { + "type": "boolean", + "example": false + }, + "originalServerId": { + "type": "string", + "example": "48.99.104.155" + } + }, + "required": [ + "instanceId", + "name", + "forwardingProtocol", + "forwardingPort", + "originServicePort", + "forwardingMode", + "sessionPersistence", + "healthCheckStatus", + "protectionPolicy", + "deleted" + ] + } + }, + "total": { + "type": "integer", + "example": 1 + }, + "page": { + "type": "integer", + "example": 1 + }, + "size": { + "type": "integer", + "example": 10 + } + }, + "additionalProperties": false, + "required": ["data", "total", "page", "size"] + }, + "DNSPortConfigRequest": { + "type": "object", + "description": "This will be the request body for DNS port config requests.", + "properties": { + "protocol": { + "type": "string", + "enum": ["tcp", "udp"], + "example": "tcp" + }, + "frontendPort": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "example": 8210 + }, + "backendPort": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "example": 8210 + }, + "realServers": { + "type": "array", + "items": { + "type": "string", + "description": "ip address", + "format": "ipv4", + "example": "121.70.168.58" + } + }, + "uid": { + "type": "string", + "example": "292733187643212169" + }, + "instanceId": { + "type": "string", + "example": "ddos-7de04971-3fc4-422f-8e3a-eb8fd44e812a" + } + }, + "required": [ + "protocol", + "frontendPort", + "backendPort", + "realServers", + "uid", + "instanceId" + ] + }, + "MCAOrderStepsResponse": { + "type": "object", + "description": "Response object containing the success status and the data for a specific order step.", + "properties": { + "success": { + "description": "Indicates whether the operation was successful or not.", + "type": "boolean", + "example": true + }, + "data": { + "type": "object", + "description": "Contains the details of the order step retrieved.", + "properties": { + "id": { + "description": "The unique identifier of the order step.", + "type": "number", + "example": 4177 + }, + "step": { + "description": "The name or description of the order step.", + "type": "string", + "example": "step 3" + } + }, + "required": ["id", "step"] + } + }, + "required": ["success", "data"] + }, + "MCAOrderStepsUpdateRequest": { + "type": "object", + "description": "The request body for updating an MCA order step.", + "properties": { + "mcaOrderStep": { + "type": "string", + "description": "The step in the MCA order. Must be one of the following values.", + "enum": [ + "step 1", + "step 2", + "step 2.5", + "step 3", + "step 4", + "step 5", + "completed" + ], + "example": "step 3" + } + }, + "required": ["mcaOrderStep"] + }, + "invoice": { + "type": "object", + "title": "Invoice", + "example": { + "azureServiceKey": "19ca18d7-0166-4190-8274-9568c50f4328", + "type": "LAYER2", + "srcPort": [ + { + "portId": "6220124ea0525400156d1653" + }, + { + "portId": "60bec23b28634d0015f872fa" + } + ], + "name": "AzureExpressRoute", + "speed": 50, + "regionId": "5a370b1c8f220300127f834c", + "destRegionId": "5c05cb06cad910000ae251f4", + "duration": 1, + "durationUnit": "d", + "evergreen": false, + "paymentType": "invoice", + "srcVlanRequest": [3607, 3608, 3609, 3610], + "classOfService": "SILVER" + }, + "properties": { + "azureServiceKey": { + "description": "Unique Azure service key.", + "type": "string" + }, + "type": { + "description": "Connection type.", + "type": "string" + }, + "srcPort": { + "description": "List of source ports.", + "type": "array", + "items": { + "type": "object", + "properties": { + "portId": { + "description": "The ID of an active DCP port.", + "type": "string" + } + }, + "required": ["portId"] + } + }, + "name": { + "description": "Name of the connection.", + "type": "string" + }, + "speed": { + "description": "Connection speed in Mbps.", + "type": "number" + }, + "regionId": { + "description": "ID of the source region.", + "type": "string" + }, + "destRegionId": { + "description": "ID of the destination region.", + "type": "string" + }, + "duration": { + "description": "Duration of the connection.", + "type": "number" + }, + "durationUnit": { + "description": "Unit for the duration (e.g., days, months, years).", + "type": "string", + "enum": ["d", "m", "y"] + }, + "evergreen": { + "description": "Indicates if the connection automatically renews.", + "type": "boolean" + }, + "paymentType": { + "description": "Payment type for the connection.", + "type": "string", + "enum": ["invoice"] + }, + "srcVlanRequest": { + "description": "VLAN request for the source, if applicable.", + "type": "array", + "items": { + "type": "number" + } + }, + "classOfService": { + "description": "Class of service for the connection.", + "type": "string", + "enum": ["SILVER", "GOLD", "BRONZE"] + } + }, + "required": [ + "azureServiceKey", + "srcPort", + "name", + "speed", + "paymentType", + "duration", + "durationUnit" + ] + }, + "ProvisionCloudRouterMyPortSite": { + "type": "object", + "title": "My Port Site", + "example": { + "accessCircuit": { + "classOfService": [ + { + "name": "BRONZE", + "value": 25 + }, + { + "name": "gold", + "value": 75 + } + ], + "portId": "579f33b548010f508c7a449c", + "rateLimit": { + "unit": "Mbps", + "value": 400 + } + }, + "name": "my_cloudrouter_site_name", + "peer": { + "type": "SELF" + }, + "discountCode": "CLOUDROUTER10" + }, + "properties": { + "accessCircuit": { + "description": "L2 config", + "properties": { + "classOfService": { + "description": "Site class of service breakdown by percent. For a single class value must equal 100. For multiple classes sum of values must be 100.", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the class.", + "enum": ["BRONZE", "SILVER", "GOLD"] + }, + "value": { + "type": "number", + "description": "Percentage for the class of service. Must equal 100 across all provided classes." + } + }, + "required": ["name", "value"] + } + }, + "portId": { + "description": "The ID of an ACTIVE DCP port.", + "type": "string" + }, + "rateLimit": { + "description": "The speed of the VPN site.", + "properties": { + "unit": { + "description": "Unit of the rateLimit", + "type": "string", + "enum": ["Mbps", "Gbps"] + }, + "value": { + "description": "value of the rateLimit", + "type": "number" + } + }, + "required": ["unit", "value"], + "type": "object" + } + }, + "type": "object", + "required": ["portId", "rateLimit", "classOfService"] + }, + "name": { + "description": "Name for the new VPN site.", + "type": "string" + }, + "peer": { + "description": "L3 peer config", + "properties": { + "type": { + "type": "string", + "enum": ["SELF"] + } + }, + "type": "object", + "required": ["type"] + }, + "discountCode": { + "description": "A valid discount code.", + "type": "string" + } + }, + "required": ["name", "accessCircuit", "peer"] + }, + "ProvisionCloudRouterGoogleSite": { + "type": "object", + "title": "Google Site", + "example": { + "accessCircuit": { + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "portId": "579f33b548010f508c7a449c", + "rateLimit": { + "unit": "Mbps", + "value": 400 + } + }, + "name": "my_cloudrouter_site_name", + "peer": { + "data": { + "pairingKey": "2dfcdee7-b6f9-41d0-b98f-639151097693/us-west1/1", + "tierRateLimit": { + "unit": "Mbps", + "value": 500 + } + }, + "type": "GOOGLE" + }, + "discountCode": "CLOUDROUTER10" + }, + "properties": { + "accessCircuit": { + "description": "L2 config", + "properties": { + "classOfService": { + "description": "An array with the desired class of service. Only one value is allowed.", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the class.", + "enum": ["BRONZE", "SILVER", "GOLD"] + }, + "value": { + "type": "number", + "description": "Only 1 Class is allowed. This value must be 100.", + "enum": [100] + } + }, + "required": ["name", "value"] + } + }, + "portId": { + "description": "The ID of an ACTIVE DCP port.", + "type": "string" + }, + "rateLimit": { + "description": "The speed of the VPN site.", + "properties": { + "unit": { + "description": "unit of the rateLimit", + "type": "string", + "enum": ["Mbps", "Gbps"] + }, + "value": { + "description": "value of the rateLimit", + "type": "number" + } + }, + "required": ["unit", "value"], + "type": "object" + } + }, + "type": "object", + "required": ["portId", "rateLimit", "classOfService"] + }, + "name": { + "description": "Name for the new VPN site.", + "type": "string" + }, + "peer": { + "description": "L3 peer config", + "properties": { + "data": { + "properties": { + "pairingKey": { + "description": "Only valid for Google sites.", + "type": "string" + }, + "tierRateLimit": { + "description": "Must be one of the speed tiers marked as available on the DCP port.", + "properties": { + "unit": { + "description": "Unit of the rateLimit", + "type": "string", + "enum": ["Mbps", "Gbps"] + }, + "value": { + "description": "value of the rateLimit", + "type": "number" + } + }, + "required": ["unit", "value"], + "type": "object" + } + }, + "type": "object", + "required": ["pairingKey", "tierRateLimit"] + }, + "type": { + "description": "Must be GOOGLE.", + "type": "string", + "enum": ["GOOGLE"] + } + }, + "type": "object", + "required": ["type", "data"] + }, + "discountCode": { + "description": "A valid discount code.", + "type": "string" + } + }, + "required": ["name", "accessCircuit", "peer"] + }, + "ProvisionCloudRouterAzureSite": { + "type": "object", + "title": "Azure Site", + "example": { + "accessCircuit": { + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "portId": "579f33b548010f508c7a449c", + "secondaryPortId": "475cf33b548010f508c7b484f", + "rateLimit": { + "unit": "Mbps", + "value": 400 + } + }, + "name": "my_cloudrouter_site_name", + "peer": { + "data": { + "pairingKey": "2dfcdee7-b6f9-41d0-b98f-639151097693/us-west1/1", + "accountId": "123456abc", + "tierRateLimit": { + "unit": "Mbps", + "value": 500 + } + }, + "type": "AZURE" + }, + "discountCode": "CLOUDROUTER10" + }, + "properties": { + "accessCircuit": { + "description": "L2 config", + "properties": { + "classOfService": { + "description": "An array with the desired class of service. Only one value is allowed.", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the class.", + "enum": ["BRONZE", "SILVER", "GOLD"] + }, + "value": { + "type": "number", + "description": "Only 1 Class is allowed. This value must be 100.", + "enum": [100] + } + }, + "required": ["name", "value"] + } + }, + "portId": { + "description": "The ID of an ACTIVE DCP port.", + "type": "string" + }, + "secondaryPortId": { + "description": "The ID of an ACTIVE DCP port. Only available for Azure sites.", + "type": "string" + }, + "rateLimit": { + "description": "The speed of the VPN site.", + "properties": { + "unit": { + "description": "Unit of the rateLimit", + "type": "string", + "enum": ["Mbps", "Gbps"] + }, + "value": { + "description": "value of the rateLimit", + "type": "number" + } + }, + "required": ["unit", "value"], + "type": "object" + } + }, + "type": "object", + "required": [ + "portId", + "secondaryPortId", + "rateLimit", + "classOfService" + ] + }, + "name": { + "description": "Name for the new VPN site.", + "type": "string" + }, + "peer": { + "description": "L3 peer config", + "properties": { + "data": { + "properties": { + "accountId": { + "description": "Azure service key.", + "type": "string" + }, + "tierRateLimit": { + "description": "Must be one of the speed tiers marked as available on the DCP port", + "properties": { + "unit": { + "description": "Unit of the rateLimit", + "type": "string", + "enum": ["Mbps", "Gbps"] + }, + "value": { + "description": "value of the rateLimit", + "type": "number" + } + }, + "required": ["unit", "value"], + "type": "object" + } + }, + "type": "object", + "required": ["accountId", "tierRateLimit"] + }, + "type": { + "description": "Must be AZURE.", + "type": "string", + "enum": ["AZURE"] + } + }, + "type": "object", + "required": ["type", "data"] + }, + "discountCode": { + "description": "A valid discount code.", + "type": "string" + } + }, + "required": ["name", "accessCircuit", "peer"] + }, + "ProvisionCloudRouterCloudSite": { + "type": "object", + "title": "Cloud Site", + "example": { + "accessCircuit": { + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "portId": "579f33b548010f508c7a449c", + "rateLimit": { + "unit": "Mbps", + "value": 400 + } + }, + "name": "my_cloudrouter_site_name", + "peer": { + "asn": 64512, + "data": { + "accountId": "123456abc", + "tierRateLimit": { + "unit": "Mbps", + "value": 500 + } + }, + "type": "AWS" + }, + "discountCode": "CLOUDROUTER10" + }, + "properties": { + "accessCircuit": { + "description": "L2 config", + "type": "object", + "required": ["portId", "rateLimit", "classOfService"], + "properties": { + "classOfService": { + "description": "An array with the desired class of service. Only one value is allowed.", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the class.", + "enum": ["BRONZE", "SILVER", "GOLD"] + }, + "value": { + "type": "number", + "description": "Only 1 Class is allowed. This value must be 100.", + "enum": [100] + } + }, + "required": ["name", "value"] + } + }, + "portId": { + "description": "The ID of an ACTIVE DCP port.", + "type": "string" + }, + "rateLimit": { + "description": "The speed of the VPN site.", + "properties": { + "unit": { + "description": "Unit of the rateLimit", + "type": "string", + "enum": ["Mbps", "Gbps"] + }, + "value": { + "description": "value of the rateLimit", + "type": "number" + } + }, + "required": ["unit", "value"], + "type": "object" + } + } + }, + "name": { + "description": "Name for the new VPN site.", + "type": "string" + }, + "peer": { + "description": "L3 peer config", + "properties": { + "asn": { + "description": "A valid ASN for the cloud provider", + "type": "number" + }, + "data": { + "type": "object", + "required": ["accountId"], + "properties": { + "accountId": { + "description": "Your account or project id with selected cloud provider.", + "type": "string" + }, + "tierRateLimit": { + "type": "object", + "description": "For DCP cloud providers. Must be one of the speed tiers marked as available on the DCP port.", + "required": ["unit", "value"], + "properties": { + "unit": { + "description": "Unit of the rateLimit", + "type": "string", + "enum": ["Mbps", "Gbps"] + }, + "value": { + "description": "value of the rateLimit", + "type": "number" + } + } + } + } + }, + "type": { + "description": "The value for the desired cloud provider (e.g. AWS)", + "type": "string" + } + }, + "type": "object", + "required": ["type", "data"] + }, + "discountCode": { + "description": "A valid discount code.", + "type": "string" + } + }, + "required": ["name", "accessCircuit", "peer"] + }, + "ProvisionCloudRouterOvhSite": { + "type": "object", + "title": "OVHCloud Site", + "example": { + "accessCircuit": { + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "portId": "579f33b548010f508c7a449c", + "rateLimit": { + "unit": "Mbps", + "value": 500 + } + }, + "name": "my_cloudrouter_site_name", + "peer": { + "asn": 64512, + "data": { + "accountId": "666e1180-b0c6-493b-901a-b19a0bc999d2", + "tierRateLimit": { + "unit": "Mbps", + "value": 500 + } + }, + "type": "OVHCLOUD" + }, + "discountCode": "CLOUDROUTER10" + }, + "properties": { + "accessCircuit": { + "description": "L2 config", + "properties": { + "classOfService": { + "description": "An array with the desired class of service. Only one value is allowed.", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the class.", + "enum": ["BRONZE", "SILVER", "GOLD"] + }, + "value": { + "type": "number", + "description": "Only 1 Class is allowed. This value must be 100.", + "enum": [100] + } + }, + "required": ["name", "value"] + } + }, + "portId": { + "description": "The PortId returned from validating your OVH Service Key", + "type": "string" + }, + "rateLimit": { + "description": "The speed of the VPN site.", + "properties": { + "unit": { + "description": "Unit of the rateLimit", + "type": "string", + "enum": ["Mbps", "Gbps"] + }, + "value": { + "description": "value of the rateLimit", + "type": "number" + } + }, + "required": ["unit", "value"], + "type": "object" + } + }, + "type": "object", + "required": ["portId", "rateLimit", "classOfService", "accountId"] + }, + "name": { + "description": "Name for the new VPN site.", + "type": "string" + }, + "peer": { + "description": "L3 peer config", + "properties": { + "asn": { + "description": "ASN for OVHCloud Valid ranges are 64512 - 65534", + "type": "number" + }, + "data": { + "properties": { + "accountId": { + "description": "OVH Service Key.", + "type": "string" + }, + "tierRateLimit": { + "description": "Must be one of the speed tiers returned when validating your OVH Service Key", + "properties": { + "unit": { + "description": "Unit of the rateLimit", + "type": "string", + "enum": ["Mbps", "Gbps"] + }, + "value": { + "description": "value of the rateLimit", + "type": "number" + } + }, + "required": ["unit", "value"], + "type": "object" + } + }, + "type": "object", + "required": ["accountId", "tierRateLimit"] + }, + "type": { + "description": "Must be OVHCLOUD.", + "type": "string", + "enum": ["OVHCLOUD"] + } + }, + "type": "object", + "required": ["asn", "type", "data"] + }, + "discountCode": { + "description": "A valid discount code.", + "type": "string" + } + }, + "required": ["name", "accessCircuit", "peer"] + }, + "ProvisionCloudRouterOracleSite": { + "type": "object", + "title": "Oracle Cloud Site", + "example": { + "accessCircuit": { + "classOfService": [ + { + "name": "BRONZE", + "value": 100 + } + ], + "portId": "579f33b548010f508c7a449c", + "rateLimit": { + "unit": "Mbps", + "value": 400 + } + }, + "name": "my_cloudrouter_site_name", + "peer": { + "data": { + "accountId": "ocid1.virtualcircuit.oc1.ap-singapore-1.aaaaaaaavg7gllkugsdbqvhh4pivxxsbonhtmkm6rqasdffotutadxahqvza", + "tierRateLimit": { + "unit": "Mbps", + "value": 500 + } + }, + "type": "ORACLE" + }, + "discountCode": "CLOUDROUTER10" + }, + "properties": { + "accessCircuit": { + "description": "L2 config", + "type": "object", + "required": ["portId", "rateLimit", "classOfService"], + "properties": { + "classOfService": { + "description": "An array with the desired class of service. Only one value is allowed.", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the class.", + "enum": ["BRONZE", "SILVER", "GOLD"] + }, + "value": { + "type": "number", + "description": "Only 1 Class is allowed. This value must be 100.", + "enum": [100] + } + }, + "required": ["name", "value"] + } + }, + "portId": { + "description": "The ID of an ACTIVE DCP port.", + "type": "string" + }, + "rateLimit": { + "description": "The speed of the VPN site.", + "properties": { + "unit": { + "description": "Unit of the rateLimit", + "type": "string", + "enum": ["Mbps", "Gbps"] + }, + "value": { + "description": "value of the rateLimit", + "type": "number" + } + }, + "required": ["unit", "value"], + "type": "object" + } + } + }, + "name": { + "description": "Name for the new VPN site.", + "type": "string" + }, + "peer": { + "description": "L3 peer config", + "properties": { + "data": { + "type": "object", + "required": ["accountId"], + "properties": { + "accountId": { + "description": "Your Oracle Cloud Identifier (OCID)", + "type": "string" + }, + "tierRateLimit": { + "type": "object", + "description": "For DCP cloud providers. Must be one of the speed tiers marked as available on the DCP port.", + "required": ["unit", "value"], + "properties": { + "unit": { + "description": "Unit of the rateLimit", + "type": "string", + "enum": ["Mbps", "Gbps"] + }, + "value": { + "description": "value of the rateLimit", + "type": "number" + } + } + } + } + }, + "type": { + "description": "Must be ORACLE.", + "type": "string", + "enum": ["ORACLE"] + } + }, + "type": "object", + "required": ["type", "data"] + }, + "discountCode": { + "description": "A valid discount code.", + "type": "string" + } + }, + "required": ["name", "accessCircuit", "peer"] + }, + "Port_CapabilitiesModel": { + "type": "object", + "properties": { + "giaStandardV1": { + "type": "boolean", + "description": "Whether the port is capable of creating a GIA Standard V1 Site on the IP network." + }, + "l2TypeA": { + "type": "boolean", + "description": "Whether the port is capable of creating an L2VPN Xconnection on the MPLS network." + }, + "l3vpnTypeA": { + "type": "boolean", + "description": "Whether the port is capable of creating an L3VPN connection on the MPLS network." + }, + "qinq": { + "type": "boolean", + "description": "Whether the port is capable of using Dot1Q Tunnels." + } + } + }, + "ValidAsn": { + "type": "object", + "properties": { + "asn": { + "type": "number", + "description": "The ASN being validated" + }, + "valid": { + "type": "boolean", + "description": "The validity of the ASN" + } + }, + "example": { + "asn": 4200000000, + "valid": true + } + }, + "InvalidAsn": { + "type": "object", + "properties": { + "asn": { + "type": "number", + "description": "The ASN being validated" + }, + "valid": { + "type": "boolean", + "description": "The validity of the ASN" + }, + "reason": { + "type": "string", + "description": "The reason for the invalidity" + } + }, + "example": { + "asn": 3200000055, + "valid": false, + "reason": "ASN should be within the accepted range [4200000000;4200009999]" + } + }, + "IoD": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The IO-D Service ID." + }, + "companyId": { + "type": "string", + "description": "The owning company's ID." + }, + "accessPortId": { + "type": "string", + "description": "The specified port's ID." + }, + "name": { + "type": "string", + "description": "The IO-D service name." + }, + "vlanId": { + "type": "number", + "description": "The VLAN ID of the access circuit (between the Access Port and a Console Connect Border Router)." + }, + "rateLimit": { + "type": "object", + "description": "The specified rate limit value and unit.", + "properties": { + "rate": { + "type": "number", + "description": "The rate limit value." + }, + "unit": { + "type": "string", + "description": "The rate limit unit." + } + } + }, + "burstRate": { + "oneOf": [ + { + "type": "object", + "properties": { + "rate": { + "type": "number", + "description": "The rate limit value." + }, + "unit": { + "type": "string", + "description": "The rate limit unit." + } + } + }, + { + "type": "null" + } + ], + "description": "The specified rate limit value and unit." + }, + "burstType": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Burst type description, e.g. '95th Percentile'." + }, + "type": { + "type": "string", + "description": "The specified routing type.", + "enum": ["DYNAMIC", "STATIC"] + }, + "asnId": { + "type": "string", + "description": "The specified ASN's ID." + }, + "ipv4BlockId": { + "type": "string", + "description": "The specified IPV4 block's id." + }, + "ipv6BlockId": { + "type": "string", + "description": "The specified IPV6 block's id." + }, + "enableIpv6": { + "type": "boolean", + "description": "Whether this service is IPv6-enabled." + }, + "customerRouterIpv4": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The customer router's IPV4." + }, + "customerRouterIpv6": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The customer router's IPV6." + }, + "consoleRouterIpv4": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The console router's IPV4." + }, + "consoleRouterIpv6": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The console router's IPV6." + }, + "linknetIpV4Block": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The linknet IPV4 block's ID." + }, + "linknetIpV6Block": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The linknet IPV6 block's ID." + }, + "bgpKey": { + "type": "string", + "description": "The specified BGP key." + }, + "staticRoutes": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ], + "description": "List of static routes for static routing." + }, + "giaSiteId": { + "type": "string", + "description": "IO-D site id from network automation." + }, + "giaOrderId": { + "type": "string", + "description": "The Order ID correlated to this IO-D service." + }, + "status": { + "type": "string", + "enum": [ + "DRAFT", + "PROVISIONING", + "ERROR", + "DOWN", + "ACTIVE", + "DELETING", + "DELETED" + ], + "description": "The IO-D service status." + }, + "peers": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "internal_ip": { + "type": "string", + "description": "Internal ip" + }, + "external_ip": { + "type": "string", + "description": "External ip" + }, + "bgp_status": { + "type": "string", + "description": "Peer BGP status." + } + } + } + }, + { + "type": "null" + } + ], + "description": "Peer info for GIA site, which contains bgp status" + }, + "defaultOriginate": { + "type": "boolean", + "description": "Whether default IPV4 route (0.0.0.0/0) is advertised to the customer router." + }, + "defaultOriginateIpv6": { + "type": "boolean", + "description": "Whether default IPV6 route is advertised to the customer router." + } + } + }, + "get": { + "properties": { + "id": { + "type": "string" + }, + "friendlyId": { + "type": "string" + }, + "simPoolId": { + "type": "string" + }, + "simPoolName": { + "type": "string" + }, + "companyId": { + "type": "string" + }, + "apnId": { + "type": "string" + }, + "connectivityType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "simQuantity": { + "type": "string" + }, + "deliveryAddress": { + "type": "string" + }, + "companyAddress": { + "type": "string" + }, + "orderType": { + "type": "string" + }, + "dnsPreferred": { + "type": "string" + }, + "dnsAlternate": { + "type": "string" + }, + "useDefaultDNS": { + "type": "string" + }, + "status": { + "type": "string" + }, + "error": { + "type": "string" + }, + "userEmail": { + "type": "string" + }, + "deliveryEmail": { + "type": "string" + }, + "paymentType": { + "type": "string" + }, + "offerType": { + "type": "string" + }, + "endUser": { + "type": "string" + }, + "skipUserEmail": { + "type": "boolean" + }, + "skipAdminEmail": { + "type": "boolean" + }, + "skipSupportEmail": { + "type": "boolean" + }, + "skipCompliance": { + "type": "boolean" + }, + "skipSlack": { + "type": "boolean" + }, + "skipInsightSr": { + "type": "boolean" + }, + "sourceEnterpriseId": { + "type": "string" + }, + "simType": { + "type": "string" + }, + "productId": { + "type": "string" + }, + "description": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "purchaseDate": { + "type": "string" + }, + "originalPurchaseOrder": { + "type": "string" + }, + "purchaseProject": { + "type": "string" + }, + "eccn": { + "type": "string" + }, + "hkHsCode": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "unitPrice": { + "type": "string" + }, + "imsiProfileId": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "deletedAt": { + "type": "string" + }, + "updatedById": { + "type": "string" + }, + "company_id": { + "type": "string" + }, + "deleted_at": { + "type": "object" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + } + } + }, + "ErrorResponseSchemaExtended": { + "properties": { + "error": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "statusCode": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + } + } + }, + "SupportTicketNote": { + "type": "object", + "properties": { + "noteText": { + "type": "string", + "description": "The text comment to be added to the ticket.", + "example": "My connection is experiencing packet loss between 0800 and 0807 every day." + } + } + }, + "DescribeDomainOverviewRequest": { + "type": "object", + "properties": { + "companyIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "domains": { + "type": "array", + "description": "List of domains to query", + "items": { + "type": "string" + } + }, + "startTime": { + "type": "string", + "format": "date-time", + "description": "Start time for the report" + }, + "endTime": { + "type": "string", + "format": "date-time", + "description": "End time for the report" + }, + "interval": { + "type": "integer", + "description": "Time interval in seconds" + }, + "region": { + "type": "string", + "description": "Region to filter the data" + }, + "queryType": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "pageSize": { + "type": "integer" + }, + "pageNumber": { + "type": "integer" + } + }, + "required": [ + "companyIds", + "domains", + "startTime", + "endTime", + "interval", + "region", + "queryType", + "uid", + "pageSize", + "pageNumber" + ], + "example": { + "companyIds": ["company-id-1", "company-id-2"], + "domains": ["example.com", "example2.com"], + "startTime": "2023-08-06T02:00:00.000Z", + "endTime": "2023-09-06T02:00:00.000Z", + "interval": 21600, + "region": "eu-west-1", + "queryType": "", + "uid": "123456789", + "pageSize": 10, + "pageNumber": 0 + } + }, + "DescribeDomainOverviewResponse": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "example": 200 + }, + "data": { + "type": "object", + "properties": { + "headers": { + "type": "object", + "properties": { + "access-control-allow-origin": { + "type": "string", + "example": "*" + }, + "date": { + "type": "string", + "example": "Tue, 05 Sep 2023 03:14:29 GMT" + }, + "content-length": { + "type": "string", + "example": "89" + }, + "keep-alive": { + "type": "string", + "example": "timeout=25" + }, + "x-acs-request-id": { + "type": "string", + "example": "936467EF-0A0A-3886-B5FF-96604273AAFB" + }, + "connection": { + "type": "string", + "example": "keep-alive" + }, + "content-type": { + "type": "string", + "example": "application/json;charset=utf-8" + }, + "etag": { + "type": "string", + "example": "89nygYOIaUphMaOEboWhVVg9" + }, + "access-control-expose-headers": { + "type": "string", + "example": "*" + }, + "x-acs-trace-id": { + "type": "string", + "example": "039ea15683691a9a2c0e3c3c1c93da31" + } + } + }, + "statusCode": { + "type": "integer", + "example": 200 + }, + "body": { + "type": "object", + "properties": { + "maxHttp": { + "type": "integer", + "example": 18299 + }, + "maxHttps": { + "type": "integer", + "example": 18018 + }, + "requestId": { + "type": "string", + "example": "936467EF-0A0A-3886-B5FF-96604273AAFB" + } + } + } + } + } + } + }, + "DescribeDomainStatusCodeListRequest": { + "type": "object", + "properties": { + "companyIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "domains": { + "type": "array", + "description": "List of domains to query", + "items": { + "type": "string" + } + }, + "startTime": { + "type": "string", + "format": "date-time", + "description": "Start time for the report" + }, + "endTime": { + "type": "string", + "format": "date-time", + "description": "End time for the report" + }, + "interval": { + "type": "integer", + "description": "Time interval in seconds" + }, + "region": { + "type": "string", + "description": "Region to filter the data" + }, + "queryType": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "pageSize": { + "type": "integer" + }, + "pageNumber": { + "type": "integer" + } + }, + "required": [ + "companyIds", + "domains", + "startTime", + "endTime", + "interval", + "region", + "queryType", + "uid", + "pageSize", + "pageNumber" + ], + "example": { + "companyIds": ["company-id-1", "company-id-2"], + "domains": ["example.com", "example2.com"], + "startTime": "2023-08-06T02:00:00.000Z", + "endTime": "2023-09-06T02:00:00.000Z", + "interval": 21600, + "region": "eu-west-1", + "queryType": "", + "uid": "123456789", + "pageSize": 10, + "pageNumber": 0 + } + }, + "DescribeDomainStatusCodeListResponse": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "example": 200 + }, + "data": { + "type": "object", + "properties": { + "headers": { + "type": "object", + "properties": { + "access-control-allow-origin": { + "type": "string", + "example": "*" + }, + "date": { + "type": "string", + "example": "Wed, 06 Sep 2023 01:47:08 GMT" + }, + "content-length": { + "type": "string", + "example": "291" + }, + "keep-alive": { + "type": "string", + "example": "timeout=25" + }, + "x-acs-request-id": { + "type": "string", + "example": "A273F8FA-865C-37B5-A867-AF2CB62490ED" + }, + "connection": { + "type": "string", + "example": "keep-alive" + }, + "content-type": { + "type": "string", + "example": "application/json;charset=utf-8" + }, + "etag": { + "type": "string", + "example": "24Pfysgh7RauIVj1mTdrkAQ1" + }, + "access-control-expose-headers": { + "type": "string", + "example": "*" + }, + "x-acs-trace-id": { + "type": "string", + "example": "494cb533a18fe5f5d63793ed9b280452" + } + } + }, + "statusCode": { + "type": "integer", + "example": 200 + }, + "body": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "example": "A273F8FA-865C-37B5-A867-AF2CB62490ED" + }, + "statusCodeList": { + "type": "array", + "items": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "example": 116 + }, + "status200": { + "type": "integer", + "example": 1984 + }, + "status2XX": { + "type": "integer", + "example": 1984 + }, + "status3XX": { + "type": "integer", + "example": 0 + }, + "status403": { + "type": "integer", + "example": 0 + }, + "status404": { + "type": "integer", + "example": 0 + }, + "status405": { + "type": "integer", + "example": 10459600 + }, + "status4XX": { + "type": "integer", + "example": 10459600 + }, + "status501": { + "type": "integer", + "example": 0 + }, + "status502": { + "type": "integer", + "example": 0 + }, + "status503": { + "type": "integer", + "example": 0 + }, + "status504": { + "type": "integer", + "example": 0 + }, + "status5XX": { + "type": "integer", + "example": 0 + }, + "time": { + "type": "integer", + "example": 1693792800 + } + } + } + } + } + } + } + } + } + }, + "DescribeDomainQPSListRequest": { + "type": "object", + "properties": { + "companyIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "domains": { + "type": "array", + "description": "List of domains to query", + "items": { + "type": "string" + } + }, + "startTime": { + "type": "string", + "format": "date-time", + "description": "Start time for the report" + }, + "endTime": { + "type": "string", + "format": "date-time", + "description": "End time for the report" + }, + "interval": { + "type": "integer", + "description": "Time interval in seconds" + }, + "region": { + "type": "string", + "description": "Region to filter the data" + }, + "queryType": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "required": [ + "companyIds", + "domains", + "startTime", + "endTime", + "interval", + "region", + "queryType", + "uid" + ], + "example": { + "companyIds": ["company-id-1", "company-id-2"], + "domains": ["example.com", "example2.com"], + "startTime": "2023-08-06T02:00:00.000Z", + "endTime": "2023-09-06T02:00:00.000Z", + "interval": 21600, + "region": "eu-west-1", + "queryType": "", + "uid": "123456789" + } + }, + "DescribeDomainQPSListResponse": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "description": "HTTP status code" + }, + "data": { + "type": "object", + "properties": { + "headers": { + "type": "object", + "properties": { + "access-control-allow-origin": { + "type": "string", + "description": "Access control header" + }, + "date": { + "type": "string", + "description": "Date header" + }, + "content-length": { + "type": "string", + "description": "Content length header" + }, + "keep-alive": { + "type": "string", + "description": "Keep-alive header" + }, + "x-acs-request-id": { + "type": "string", + "description": "Request ID header" + }, + "connection": { + "type": "string", + "description": "Connection header" + }, + "content-type": { + "type": "string", + "description": "Content type header" + }, + "etag": { + "type": "string", + "description": "Etag header" + }, + "access-control-expose-headers": { + "type": "string", + "description": "Access control expose header" + }, + "x-acs-trace-id": { + "type": "string", + "description": "ACS Trace ID header" + } + } + }, + "statusCode": { + "type": "integer", + "description": "Status code" + }, + "body": { + "type": "object", + "properties": { + "domainQPSList": { + "type": "array", + "description": "List of domain QPS information", + "items": { + "type": "object", + "properties": { + "attackQps": { + "type": "integer", + "description": "Attack QPS" + }, + "cacheHits": { + "type": "integer", + "description": "Cache Hits" + }, + "index": { + "type": "integer", + "description": "Index" + }, + "maxAttackQps": { + "type": "integer", + "description": "Maximum Attack QPS" + }, + "maxNormalQps": { + "type": "integer", + "description": "Maximum Normal QPS" + }, + "maxQps": { + "type": "integer", + "description": "Maximum QPS" + }, + "time": { + "type": "integer", + "description": "Time" + }, + "totalCount": { + "type": "integer", + "description": "Total Count" + }, + "totalQps": { + "type": "integer", + "description": "Total QPS" + } + } + } + }, + "requestId": { + "type": "string", + "description": "Request ID" + } + } + } + } + } + }, + "example": { + "code": 200, + "data": { + "headers": { + "access-control-allow-origin": "*", + "date": "Thu, 07 Sep 2023 03:13:42 GMT", + "content-length": "232", + "keep-alive": "timeout=25", + "x-acs-request-id": "CF412C6C-A488-3B43-B765-8B6F6E8EF9F1", + "connection": "keep-alive", + "content-type": "application/json;charset=utf-8", + "etag": "2YhHJI3NlXePWxNOV/gmVTQ2", + "access-control-expose-headers": "*", + "x-acs-trace-id": "fcbc2e111cf3069d7a4da6bd2211a74f" + }, + "statusCode": 200, + "body": { + "domainQPSList": [ + { + "attackQps": 485, + "cacheHits": 0, + "index": 116, + "maxAttackQps": 36316, + "maxNormalQps": 0, + "maxQps": 36316, + "time": 1693792800, + "totalCount": 10461584, + "totalQps": 485 + } + ], + "requestId": "CF412C6C-A488-3B43-B765-8B6F6E8EF9F1" + } + } + } + }, + "DescribeDomainAttackEventsRequest": { + "type": "object", + "properties": { + "companyIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "domains": { + "type": "array", + "description": "List of domains to query", + "items": { + "type": "string" + } + }, + "startTime": { + "type": "string", + "format": "date-time", + "description": "Start time for the report" + }, + "endTime": { + "type": "string", + "format": "date-time", + "description": "End time for the report" + }, + "interval": { + "type": "integer", + "description": "Time interval in seconds" + }, + "region": { + "type": "string", + "description": "Region to filter the data" + }, + "queryType": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "pageSize": { + "type": "integer" + }, + "pageNumber": { + "type": "integer" + } + }, + "required": [ + "companyIds", + "domains", + "startTime", + "endTime", + "interval", + "region", + "queryType", + "uid", + "pageSize", + "pageNumber" + ], + "example": { + "companyIds": ["company-id-1", "company-id-2"], + "domains": ["example.com", "example2.com"], + "startTime": "2023-08-06T02:00:00.000Z", + "endTime": "2023-09-06T02:00:00.000Z", + "interval": 21600, + "region": "eu-west-1", + "queryType": "", + "uid": "123456789", + "pageSize": 10, + "pageNumber": 0 + } + }, + "DescribeDomainAttackEventsResponse": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "example": 200 + }, + "data": { + "type": "object", + "properties": { + "headers": { + "type": "object", + "properties": { + "access-control-allow-origin": { + "type": "string", + "example": "*" + }, + "date": { + "type": "string", + "format": "date-time", + "example": "Fri, 08 Sep 2023 02:26:45 GMT" + }, + "content-length": { + "type": "string", + "example": "188" + }, + "keep-alive": { + "type": "string", + "example": "timeout=25" + }, + "x-acs-request-id": { + "type": "string", + "example": "B2DCF07F-4C0B-3D51-91D6-79B69167CDED" + }, + "connection": { + "type": "string", + "example": "keep-alive" + }, + "content-type": { + "type": "string", + "example": "application/json;charset=utf-8" + }, + "etag": { + "type": "string", + "example": "1Yg5UoqUNzIrsivvGvZcn8A8" + }, + "access-control-expose-headers": { + "type": "string", + "example": "*" + }, + "x-acs-trace-id": { + "type": "string", + "example": "33d2575d6461143e945aad1163d16027" + } + } + }, + "statusCode": { + "type": "integer", + "example": 200 + }, + "body": { + "type": "object", + "properties": { + "domainAttackEvents": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "example": "mooncake-20230904-1515.io" + }, + "endTime": { + "type": "integer", + "example": 1693814370 + }, + "maxQps": { + "type": "integer", + "example": 37119 + }, + "startTime": { + "type": "integer", + "example": 1693814040 + } + } + } + }, + "requestId": { + "type": "string", + "example": "B2DCF07F-4C0B-3D51-91D6-79B69167CDED" + }, + "totalCount": { + "type": "integer", + "example": 1 + } + } + } + } + } + } + }, + "multipleResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "apnId": { + "type": "string" + }, + "subnet": { + "type": "string" + }, + "firewall": { + "type": "string" + }, + "firewallStatus": { + "type": "string" + }, + "status": { + "type": "string" + }, + "error": { + "type": "string" + }, + "primaryDNS": { + "type": "string" + }, + "secondaryDNS": { + "type": "string" + }, + "companyId": { + "type": "string" + }, + "defaultPrimaryDNS": { + "type": "string" + }, + "defaultSecondaryDNS": { + "type": "string" + }, + "useDefaultDNS": { + "type": "boolean" + }, + "customFirewallEnabled": { + "type": "boolean" + }, + "customFirewallPolicies": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + } + } + }, + "single": { + "type": "object", + "required": ["name", "apnId", "companyId"], + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "apnId": { + "type": "string" + }, + "subnet": { + "type": "string", + "description": "Gets assigned to the SIM pool on creation" + }, + "firewall": { + "type": "string", + "enum": ["ENABLED", "DISABLED", "CUSTOM"], + "default": "DISABLED", + "description": "CUSTOM is not supported yet" + }, + "firewallStatus": { + "type": "string", + "enum": ["SUCCESS", "PROCESSING", "FAILED"], + "default": "SUCCESS" + }, + "status": { + "type": "string", + "enum": ["SUCCESS", "PROCESSING", "FAILED"], + "default": "SUCCESS" + }, + "error": { + "type": "string" + }, + "primaryDNS": { + "type": "string" + }, + "secondaryDNS": { + "type": "string" + }, + "companyId": { + "type": "string" + }, + "defaultPrimaryDNS": { + "type": "string" + }, + "defaultSecondaryDNS": { + "type": "string" + }, + "useDefaultDNS": { + "type": "boolean" + }, + "customFirewallEnabled": { + "type": "boolean" + }, + "customFirewallPolicies": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + } + } + }, + "singleResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "apnId": { + "type": "string" + }, + "subnet": { + "type": "string" + }, + "firewall": { + "type": "string" + }, + "firewallStatus": { + "type": "string" + }, + "status": { + "type": "string" + }, + "error": { + "type": "string" + }, + "primaryDNS": { + "type": "string" + }, + "secondaryDNS": { + "type": "string" + }, + "companyId": { + "type": "string" + }, + "defaultPrimaryDNS": { + "type": "string" + }, + "defaultSecondaryDNS": { + "type": "string" + }, + "useDefaultDNS": { + "type": "boolean" + }, + "customFirewallEnabled": { + "type": "boolean" + }, + "customFirewallPolicies": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + } + } + }, + "singleUpdate": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "apnId": { + "type": "string" + }, + "subnet": { + "type": "string", + "description": "Gets assigned to the sim pool on creation" + }, + "firewall": { + "type": "string", + "enum": ["ENABLED", "DISABLED", "CUSTOM"], + "default": "DISABLED", + "description": "CUSTOM is not supported yet" + }, + "firewallStatus": { + "type": "string", + "enum": ["SUCCESS", "PROCESSING", "FAILED"], + "default": "SUCCESS" + }, + "status": { + "type": "string", + "enum": ["SUCCESS", "PROCESSING", "FAILED"], + "default": "SUCCESS" + }, + "error": { + "type": "string" + }, + "primaryDNS": { + "type": "string" + }, + "secondaryDNS": { + "type": "string" + }, + "companyId": { + "type": "string" + }, + "defaultPrimaryDNS": { + "type": "string" + }, + "defaultSecondaryDNS": { + "type": "string" + }, + "useDefaultDNS": { + "type": "boolean" + }, + "customFirewallEnabled": { + "type": "boolean" + }, + "customFirewallPolicies": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + } + } + }, + "moveSimsToSimPool": { + "properties": { + "body": { + "type": "object", + "properties": { + "sims": { + "type": "object", + "properties": { + "sourceSimPoolId": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IMSI" + } + } + } + } + } + } + }, + "getAll": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "iotSimPoolId": { + "type": "string" + }, + "iotOrderId": { + "type": "string" + }, + "state": { + "type": "string" + }, + "iccid": { + "type": "string" + }, + "imsi": { + "type": "string" + }, + "msisdn": { + "type": "string" + }, + "detectedImei": { + "type": "string" + }, + "ipAddress": { + "type": "string" + }, + "companyId": { + "type": "string" + }, + "label": { + "type": "string" + }, + "status": { + "type": "string" + }, + "simTransferId": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "updatedAt": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "simProvider": { + "type": "string" + }, + "company_id": { + "type": "string" + }, + "iot_order_id": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "iot_sim_pool_id": { + "type": "string" + } + } + }, + "not-valid": { + "properties": { + "error": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "statusCode": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + } + } + }, + "update": { + "properties": { + "status": { + "type": "string", + "enum": ["ACTIVE", "PAUSED"] + }, + "label": { + "type": "string", + "description": "It is a description for the SIM." + } + } + }, + "getAll-2": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "imsiTypeId": { + "type": "string" + }, + "simType": { + "type": "string" + }, + "shieldOnly": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + } + } + }, + "get-2": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "imsiTypeId": { + "type": "string" + }, + "simType": { + "type": "string" + }, + "shieldOnly": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + } + } + }, + "apn-get": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "apn": { + "type": "string" + }, + "location": { + "type": "string" + }, + "friendlyName": { + "type": "string" + }, + "subnet": { + "type": "string" + }, + "ipAvailable": { + "type": "boolean" + }, + "serviceType": { + "type": "string" + }, + "dbConnection": { + "type": "string" + }, + "apnAcl": { + "type": "string" + }, + "apnVrf": { + "type": "string" + }, + "router1": { + "type": "string" + }, + "router2": { + "type": "string" + }, + "priority": { + "type": "string" + }, + "createdByAgent": { + "type": "string" + }, + "capacitySoftLimit": { + "type": "string" + }, + "capacityHardLimit": { + "type": "string" + }, + "firewallDevice": { + "type": "string" + }, + "adom": { + "type": "string" + }, + "vdom": { + "type": "string" + }, + "notificationProvider": { + "type": "string" + }, + "complianceProvider": { + "type": "string" + }, + "billingProvider": { + "type": "string" + }, + "simPoolProvider": { + "type": "string" + }, + "simProvider": { + "type": "string" + }, + "subnetProvider": { + "type": "string" + }, + "dnsProvider": { + "type": "string" + }, + "ipAllocatorProvider": { + "type": "string" + }, + "radiusProvider": { + "type": "string" + }, + "firewallProvider": { + "type": "string" + }, + "templateProvider": { + "type": "string" + }, + "internetRouteTarget": { + "type": "string" + }, + "primaryDNS": { + "type": "string" + }, + "secondaryDNS": { + "type": "string" + }, + "apnVrfRt": { + "type": "string" + }, + "genericIp": { + "type": "string" + }, + "mplsInterface": { + "type": "string" + }, + "internetInterface": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + } + } + }, + "getAll-3": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "imsiTypeId": { + "type": "string" + }, + "simType": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "shieldOnly": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + } + } + }, + "get-3": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "imsiTypeId": { + "type": "string" + }, + "simType": { + "type": "string" + }, + "shieldOnly": { + "type": "boolean" + }, + "updatedBy": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "description": "A date time format." + } + } + }, + "GetSignedCompanyResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "country": { + "type": "string" + }, + "insightId": { + "type": "integer" + }, + "companyName": { + "type": "string" + }, + "address": { + "type": "string" + }, + "deleted_at": { + "type": "string", + "format": "date-time" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "example": { + "id": "123e4567-e89b-12d3-a456-426614174000", + "country": "US", + "insightId": 987654, + "companyName": "Tech Innovators Inc.", + "address": "1234 Silicon Valley Blvd, San Francisco, CA 94107", + "deleted_at": "2024-08-30T16:45:30Z", + "created_at": "2023-03-30T16:45:30Z", + "updated_at": "2024-07-30T16:45:30Z" + } + }, + "GeographicAddress": { + "description": "Structured textual way of describing how to find a property in an urban area (country properties are often defined differently).\nNote: Address corresponds to SID UrbanPropertyAddress", + "discriminator": { + "mapping": { + "FieldedAddress": "#/components/schemas/FieldedAddress", + "FormattedAddress": "#/components/schemas/FormattedAddress", + "MEFGeographicPoint": "#/components/schemas/MEFGeographicPoint", + "GeographicAddressLabel": "#/components/schemas/GeographicAddressLabel" + }, + "propertyName": "@type" + }, + "properties": { + "hasPublicSite": { + "description": "This attribute specifies if that Address contains Service Sites that are public such as Meet-Me-Rooms at an interconnect location or a shared telecom room in the basement of a multi-tenant building", + "readOnly": true, + "type": "boolean" + }, + "@type": { + "description": "This field is used as discriminator. The value is the name of one of the types that inherit from it using 'allOf', i.e. one of FieldedAddress, FormattedAddress, GeographicAddressLabel, MEFGeographicPoint. Moreover, it might discriminate for an additional related place as defined in '@schemaLocation'.\n", + "type": "string" + }, + "allowsNewSite": { + "description": "This attribute specifies if a Buyer must use one of the known existing Service Sites at this location for any Products delivered to this Address. For example, if a particular building owner mandated that all interconnects be done in a shared Public Meet-Me-Room, this attribute would be set to False for that Address.", + "readOnly": true, + "type": "boolean" + }, + "id": { + "description": "Unique identifier of the place", + "readOnly": true, + "type": "string" + }, + "href": { + "description": "Unique reference of the place", + "readOnly": true, + "type": "string" + }, + "@schemaLocation": { + "description": "A URI to a JSON-Schema file that defines additional attributes and relationships. May be used to define additional GeographicAddress types. Usage of this attribute must be agreed upon between Buyer and Seller.", + "format": "uri", + "type": "string" + }, + "associatedGeographicAddress": { + "$ref": "#/components/schemas/FieldedAddress", + "readOnly": true, + "description": "A Fielded Address that is associated with the Geographic Point or the Geographic Address Label." + } + }, + "required": ["@type"], + "type": "object" + }, + "MEFSubUnit": { + "description": "Allows for sub unit identification", + "properties": { + "subUnitNumber": { + "description": "The discriminator used for the subunit, often just a simple number but may also be a range.", + "type": "string" + }, + "subUnitType": { + "description": "The type of subunit e.g. BERTH, FLAT, PIER, SUITE, SHOP, TOWER, UNIT, WHARF.", + "type": "string" + } + }, + "required": ["subUnitNumber", "subUnitType"], + "type": "object" + }, + "GeographicSubAddress": { + "description": "Additional fields used to specify an address, as detailed as possible.", + "properties": { + "buildingName": { + "description": "Allows for identification of places that require building name as part of addressing information\n", + "type": "string" + }, + "subUnit": { + "description": "Representation of a MEFSubUnit It is used for describing subunit within a subAddress e.g.BERTH, FLAT, PIER, SUITE, SHOP, TOWER, UNIT, WHARF.", + "items": { + "$ref": "#/components/schemas/MEFSubUnit" + }, + "type": "array" + }, + "levelType": { + "description": "Describes level types within a building", + "type": "string" + }, + "levelNumber": { + "description": "Used where a level type may be repeated e.g. BASEMENT 1, BASEMENT 2", + "type": "string" + }, + "privateStreetNumber": { + "description": "Private streets numbers internal to a private street", + "type": "string" + }, + "privateStreetName": { + "description": "Private streets internal to a property (e.g. a university) may have internal names that are not recorded by the land title office", + "type": "string" + } + }, + "type": "object" + }, + "FieldedAddress": { + "allOf": [ + { + "$ref": "#/components/schemas/GeographicAddress" + }, + { + "properties": { + "country": { + "description": "The country that the address is in", + "type": "string" + }, + "streetType": { + "description": "The type of street (e.g., alley, avenue, boulevard, brae, crescent, drive, highway, lane, terrace, parade, place, tarn, way, wharf)", + "type": "string" + }, + "postcodeExtension": { + "description": "An extension of a postal code. E.g. the part following the dash in a US urban property address", + "type": "string" + }, + "city": { + "description": "The city that the address is in", + "type": "string" + }, + "streetNr": { + "description": "Number identifying a specific property on a public street. It may be combined with streetNrLast for ranged addresses. MEF 79 defines it as required however as in certain countries it is not used we make it optional in API.", + "type": "string" + }, + "locality": { + "description": "The locality that the address is in", + "type": "string" + }, + "postcode": { + "description": "A descriptor for a postal delivery area used to speed and simplify the delivery of mail (also known as zip code) MEF 79 defines it as required however as in certain countries it is not used we make it optional in API.", + "type": "string" + }, + "streetNrLast": { + "description": "Last number in a range of street numbers allocated to a property", + "type": "string" + }, + "streetNrSuffix": { + "description": "The first street number suffix", + "type": "string" + }, + "streetName": { + "description": "Name of the street or other street type", + "type": "string" + }, + "stateOrProvince": { + "description": "The State or Province that the address is in", + "type": "string" + }, + "streetNrLastSuffix": { + "description": "Last street number suffix for a ranged address", + "type": "string" + }, + "geographicSubAddress": { + "$ref": "#/components/schemas/GeographicSubAddress", + "description": "Additional fields used to specify an address, as detailed as possible." + }, + "streetSuffix": { + "description": "A modifier denoting a relative direction", + "type": "string" + } + }, + "required": ["city", "country", "streetName"], + "type": "object" + } + ], + "description": "A type of Address that has a discrete field and value for each type of boundary or identifier down to the lowest level of detail. For example \"street number\" is one field, \"street name\" is another field, etc. Reference: MEF 79 (Sn 8.9.2)" + }, + "FormattedAddress": { + "allOf": [ + { + "$ref": "#/components/schemas/GeographicAddress" + }, + { + "properties": { + "country": { + "description": "The country that the address is in", + "type": "string" + }, + "postcodeExtension": { + "description": "An extension of a postal code. E.g. the part following the dash in a US urban property address", + "type": "string" + }, + "stateOrProvince": { + "description": "The State or Province that the address is in", + "type": "string" + }, + "city": { + "description": "The city that the address is in", + "type": "string" + }, + "addrLine2": { + "description": "The second address line in a formatted address", + "type": "string" + }, + "addrLine1": { + "description": "The first address line in a formatted address", + "type": "string" + }, + "locality": { + "description": "An area of defined or undefined boundaries within a local authority or other legislatively defined area, usually rural or semi-rural in nature", + "type": "string" + }, + "postcode": { + "description": "A descriptor for a postal delivery area used to speed and simplify the delivery of mail (also known as ZIP code)", + "type": "string" + } + }, + "required": ["addrLine1", "city", "country"], + "type": "object" + } + ], + "description": "A type of Address that has discrete fields for each type of boundary or identifier with the exception of street and more specific location details, which are combined into a maximum of two strings based on local postal addressing conventions. Reference: MEF 79 (Sn 8.9.3)" + }, + "MEFGeographicPoint": { + "allOf": [ + { + "$ref": "#/components/schemas/GeographicAddress" + }, + { + "properties": { + "spatialRef": { + "description": "The spatial reference system used to determine the coordinates. The system used and the value of this field are to be agreed during the onboarding process.", + "type": "string" + }, + "x": { + "description": "The latitude expressed in the format specified by the `spacialRef`", + "type": "string" + }, + "y": { + "description": "The longitude expressed in the format specified by the `spacialRef`", + "type": "string" + }, + "z": { + "description": "The elevation expressed in the format specified by the `spacialRef`", + "type": "string" + } + }, + "required": ["spatialRef", "x", "y"], + "type": "object" + } + ], + "description": "A MEFGeographicPoint defines a geographic point through coordinates. Reference: MEF 79 (Sn 8.9.5), MEF 79.0.2 (Sn 8.9.5)\n" + }, + "GeographicAddressLabel": { + "allOf": [ + { + "$ref": "#/components/schemas/GeographicAddress" + }, + { + "properties": { + "externalReferenceId": { + "description": "The unique reference to an Address as provided by the Administrative Authority.", + "type": "string" + }, + "externalReferenceType": { + "description": "The organization or standard from the organization that administers this Geographic Address Label ensuring it is unique within the Administrative Authority. The value(s) to be used are to be agreed during the onboarding. For North American providers this would normally be CLLI (Common Language Location Identifier) code.", + "type": "string" + } + }, + "required": ["externalReferenceId", "externalReferenceType"], + "type": "object" + } + ], + "description": "A unique identifier controlled by a generally accepted independent administrative authority that specifies a fixed geographical location. \nReference: MEF 79 (Sn 8.9.4)" + }, + "GeographicAddressValidation_Create": { + "description": "This resource is used to manage address validation request.\n\nSkipped properties: alternateGeographicAddress, bestMatchGeographicAddress, validationResult.", + "properties": { + "provideAlternative": { + "description": "Indicator provided by the requester to specify if alternate addresses must be provided in case of partial or fail result. MEF: The attribute is kept for TMF API compliance. MEF requires this attribute always to be set to 'true'. Alternatives should be provided regardless of whether best match was found. The Seller is allowed not to implement the support for 'false'\n", + "type": "boolean" + }, + "submittedGeographicAddress": { + "$ref": "#/components/schemas/GeographicAddress", + "description": "The address as submitted to validation. MEF: Structure used by the buyer to request geographic address validation" + } + }, + "required": ["provideAlternative", "submittedGeographicAddress"], + "type": "object" + }, + "MEFValidationResultType": { + "description": "Result of the address validation:\n- success - best match found,\n- partial - no best match but alternatives available,\n- fail - neither best match nor alternatives provided\n", + "enum": ["success", "partial", "fail"], + "type": "string" + }, + "GeographicAddressValidation": { + "description": "This resource is used to manage address validation response.", + "properties": { + "validationResult": { + "$ref": "#/components/schemas/MEFValidationResultType", + "description": "Result of the address validation (success, partial, fail)" + }, + "alternateGeographicAddress": { + "items": { + "$ref": "#/components/schemas/GeographicAddress" + }, + "type": "array", + "description": "An array of zero or more Addresses known to the Seller that are\nconsidered by the Seller to match the submittedGeographicAddress.\nNot including the bestMatchAddress. MEF: Alternatives should be\nprovided regardless of whether best match was found.\n" + }, + "provideAlternative": { + "description": "Indicator provided by the requester to specify if alternate addresses must be provided in case of partial or fail result. MEF: The attribute is kept for TMF API compliance. MEF requires this attribute always to be set to 'true'. Alternatives should be provided regardless of whether best match was found. The Seller is allowed not to implement the support for 'false'\n", + "type": "boolean" + }, + "submittedGeographicAddress": { + "$ref": "#/components/schemas/GeographicAddress", + "description": "The address as submitted to validation. MEF: Structure used by the buyer to request geographic address validation" + }, + "bestMatchGeographicAddress": { + "$ref": "#/components/schemas/GeographicAddress", + "description": "Represents that the Seller is confident this is likely a direct match to the submittedGeographicAddress" + } + }, + "required": ["provideAlternative", "submittedGeographicAddress"], + "type": "object" + }, + "Error": { + "description": "Standard Class used to describe API response error. Not intended to be used directly. The `code` in the HTTP header is used as a discriminator for the type of error returned in runtime.\n", + "properties": { + "reason": { + "description": "Text that explains the reason for error. This can be shown to a client user.", + "maxLength": 255, + "type": "string" + }, + "message": { + "description": "Text that provides mode details and corrective actions related to the error. This can be shown to a client user.", + "type": "string" + }, + "referenceError": { + "description": "URL pointing to documentation describing the error", + "format": "uri", + "type": "string" + } + }, + "required": ["reason"], + "type": "object" + }, + "Error400Code": { + "type": "string", + "description": "One of the following error codes:\n- missingQueryParameter: The URI is missing a required query-string parameter\n- missingQueryValue: The URI is missing a required query-string parameter value\n- invalidQuery: The query section of the URI is invalid.\n- invalidBody: The request has an invalid body", + "enum": [ + "missingQueryParameter", + "missingQueryValue", + "invalidQuery", + "invalidBody" + ] + }, + "Error400": { + "allOf": [ + { + "$ref": "#/components/schemas/Error" + }, + { + "properties": { + "code": { + "$ref": "#/components/schemas/Error400Code" + } + }, + "required": ["code"], + "type": "object" + } + ], + "description": "Bad Request. (https://tools.ietf.org/html/rfc7231#section-6.5.1)" + }, + "Error401Code": { + "type": "string", + "description": "One of the following error codes:\n- missingCredentials: No credentials provided.\n- invalidCredentials: Provided credentials are invalid or expired", + "enum": ["missingCredentials", "invalidCredentials"] + }, + "Error401": { + "allOf": [ + { + "$ref": "#/components/schemas/Error" + }, + { + "type": "object", + "properties": { + "code": { + "$ref": "#/components/schemas/Error401Code" + } + }, + "required": ["code"] + } + ], + "description": "Unauthorized. (https://tools.ietf.org/html/rfc7235#section-3.1)" + }, + "Error403Code": { + "type": "string", + "description": "This code indicates that the server understood\nthe request but refuses to authorize it because\nof one of the following error codes:\n- accessDenied: Access denied\n- forbiddenRequester: Forbidden requester\n- tooManyUsers: Too many users", + "enum": ["accessDenied", "forbiddenRequester", "tooManyUsers"] + }, + "Error403": { + "allOf": [ + { + "$ref": "#/components/schemas/Error" + }, + { + "properties": { + "code": { + "$ref": "#/components/schemas/Error403Code" + } + }, + "required": ["code"], + "type": "object" + } + ], + "description": "Forbidden. (https://tools.ietf.org/html/rfc7231#section-6.5.3)" + }, + "Error422Code": { + "type": "string", + "description": "One of the following error codes:\n - missingProperty: The property the Seller has expected is not present in the payload\n - invalidValue: The property has an incorrect value\n - invalidFormat: The property value does not comply with the expected value format\n - referenceNotFound: The object referenced by the property cannot be identified in the Seller system\n - unexpectedProperty: Additional property, not expected by the Seller has been provided\n - tooManyRecords: the number of records to be provided in the response exceeds the Seller's threshold.\n - otherIssue: Other problem was identified (detailed information provided in a reason)\n", + "enum": [ + "missingProperty", + "invalidValue", + "invalidFormat", + "referenceNotFound", + "unexpectedProperty", + "tooManyRecords", + "otherIssue" + ] + }, + "Error422": { + "allOf": [ + { + "$ref": "#/components/schemas/Error" + }, + { + "type": "object", + "properties": { + "code": { + "$ref": "#/components/schemas/Error422Code" + }, + "propertyPath": { + "type": "string", + "description": "A pointer to a particular property of the payload that caused the validation issue. It is highly recommended that this property should be used.\nDefined using JavaScript Object Notation (JSON) Pointer (https://tools.ietf.org/html/rfc6901).\n" + } + }, + "required": ["code"] + } + ], + "description": "Unprocessable entity due to a business validation problem. (https://tools.ietf.org/html/rfc4918#section-11.2)" + }, + "Error500": { + "allOf": [ + { + "$ref": "#/components/schemas/Error" + }, + { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The following error code:\n- internalError: Internal server error - the server encountered an unexpected condition that prevented it from fulfilling the request.", + "enum": ["internalError"] + } + }, + "required": ["code"] + } + ], + "description": "Internal Server Error. (https://tools.ietf.org/html/rfc7231#section-6.6.1)" + }, + "Error404": { + "allOf": [ + { + "$ref": "#/components/schemas/Error" + }, + { + "properties": { + "code": { + "description": "The following error code:\n- notFound: A current representation for the target resource not found", + "enum": ["notFound"], + "type": "string" + } + }, + "required": ["code"], + "type": "object" + } + ], + "description": "Resource for the requested path not found. (https://tools.ietf.org/html/rfc7231#section-6.5.4)" + }, + "MEFBuyerSellerType": { + "type": "string", + "description": "Indicates if the note is from Buyer or Seller.", + "enum": ["buyer", "seller"] + }, + "Note": { + "type": "object", + "description": "Extra information about a given entity. Only useful in processes involving human interaction. Not applicable for the automated process.", + "properties": { + "author": { + "type": "string", + "description": "Author of the note" + }, + "date": { + "type": "string", + "format": "date-time", + "description": "Date the Note was created" + }, + "id": { + "type": "string", + "description": "Identifier of the note within its containing entity (may or may not be globally unique, depending on provider implementation)" + }, + "source": { + "$ref": "#/components/schemas/MEFBuyerSellerType" + }, + "text": { + "type": "string", + "description": "Text of the note" + } + }, + "required": ["author", "date", "id", "source", "text"] + }, + "RelatedContactInformation": { + "type": "object", + "description": "Contact information of an individual or organization playing a role for\nthis Order Item. The rule for mapping a represented attribute value to a\n`role` is to use the _lowerCamelCase_ pattern e.g. \n- Buyer Order Item Contact: `role=buyerOrderItemContact` \n- Buyer Implementation Contact: `role=buyerImplementationContact` \n- Buyer Technical Contact: `role=buyerTechnicalContact`\n", + "properties": { + "emailAddress": { + "type": "string", + "description": "Email address" + }, + "name": { + "type": "string", + "description": "Name of the contact" + }, + "number": { + "type": "string", + "description": "Phone number" + }, + "numberExtension": { + "type": "string", + "description": "Phone number extension" + }, + "organization": { + "type": "string", + "description": "The organization or company that the contact belongs to" + }, + "postalAddress": { + "$ref": "#/components/schemas/FieldedAddress" + }, + "role": { + "type": "string", + "description": "A role the party plays in a given context." + } + }, + "required": ["emailAddress", "name", "number", "role"] + }, + "ProductOrder_Common": { + "type": "object", + "description": "A Product Order is a type of order which can be used to place an order between a customer and a service provider or between a service provider and a partner and vice versa,", + "properties": { + "externalId": { + "type": "string", + "description": "An identifier for this order within the Buyer's enterprise." + }, + "note": { + "type": "array", + "description": "Free form text to clarify or explain the Product Order. Only new notes can be entered. The Buyer and Seller cannot modify an existing Note. The Buyer creates a Note when creating the Product Order or when updating it. The Seller may add notes at any time.\n", + "items": { + "$ref": "#/components/schemas/Note" + } + }, + "projectId": { + "type": "string", + "description": "An identifier that is used to group Product Orders that is important to the Buyer. A projectId can be used to relate multiple Product Orders together." + }, + "relatedContactInformation": { + "type": "array", + "description": "Contact information of an individual or organization playing a role in this context.\n(e.g. Product Order Contact: role=productOrderContact;\nSeller Contact: role=sellerContact)\nProviding the Product Order Contact in the request is mandatory.", + "items": { + "$ref": "#/components/schemas/RelatedContactInformation" + }, + "minItems": 1 + } + }, + "required": ["relatedContactInformation"] + }, + "MEFProductActionType": { + "type": "string", + "description": "Action to be performed on the Product that the Order Item refers to.\n\n| ProductActionType | MEF 57.2 |\n| ----------------- | ---------- |\n| add | INSTALL |\n| modify | CHANGE |\n| delete | DISCONNECT |\n", + "enum": ["add", "modify", "delete"] + }, + "MEFBillingAccountRef": { + "type": "object", + "description": "A reference to the Buyer's Billing Account", + "properties": { + "id": { + "type": "string", + "description": "Identifies the buyer's billing account to which the recurring and non-recurring charges for this order or order item will be billed. Required if the Buyer has more than one Billing Account with the Seller and for all new Product Orders." + } + }, + "required": ["id"] + }, + "TimeUnit": { + "type": "string", + "description": "Represents a unit of time.\n", + "enum": [ + "calendarMonths", + "calendarDays", + "calendarHours", + "calendarMinutes", + "businessDays", + "businessHours", + "businessMinutes" + ] + }, + "Duration-2": { + "type": "object", + "description": "A Duration in a given unit of time e.g. 3 hours, or 5 days.", + "properties": { + "amount": { + "type": "integer", + "description": "Duration (number of seconds, minutes, hours, etc.)" + }, + "units": { + "$ref": "#/components/schemas/TimeUnit" + } + }, + "required": ["amount", "units"] + }, + "MEFOrderItemCoordinationDependencyType": { + "type": "string", + "description": "Possible values of the Order Item Coordination Dependency\n\n| OrderItemCoordinationDependencyType | MEF 57.2 | Description |\n|-------------------------------------|------------------|----------------------------------------------------------------------------------------------------|\n| startToStart | START_TO_START | Work on the Specified Order Item can only be started after the Coordinated Order Items are started |\n| startToFinish | START_TO_FINISH | The Coordinated Order Items must complete before work on the Specified Order Item begins |\n| finishToStart | FINISH_TO_START | Work on the Related Order Items begins after the completion of the Specified Order Item |\n| finishToFinish | FINISH_TO_FINISH | Work on the Related Order Items completes at the same time as the Specified Order Item |\n", + "enum": [ + "startToStart", + "startToFinish", + "finishToStart", + "finishToFinish" + ] + }, + "MEFOrderItemCoordinatedAction": { + "type": "object", + "description": "The interval after the completion of one or more related Order Items that this Order Item can be started or completed", + "properties": { + "coordinatedActionDelay": { + "$ref": "#/components/schemas/Duration-2" + }, + "coordinationDependency": { + "$ref": "#/components/schemas/MEFOrderItemCoordinationDependencyType" + }, + "itemId": { + "type": "string", + "description": "Specifies Order Item that is to be coordinated with this Order Item." + } + }, + "required": [ + "coordinatedActionDelay", + "coordinationDependency", + "itemId" + ] + }, + "RelatedPlaceRefOrValue": { + "type": "object", + "description": "Place defines the places where the product order must be done.", + "discriminator": { + "mapping": { + "FieldedAddress": "#/components/schemas/FieldedAddress", + "FormattedAddress": "#/components/schemas/FormattedAddress", + "GeographicAddressLabel": "#/components/schemas/GeographicAddressLabel", + "GeographicAddressRef": "#/components/schemas/GeographicAddressRef", + "GeographicSiteRef": "#/components/schemas/GeographicSiteRef", + "MEFGeographicPoint": "#/components/schemas/MEFGeographicPoint" + }, + "propertyName": "@type" + }, + "properties": { + "@schemaLocation": { + "type": "string", + "format": "uri", + "description": "A URI to a JSON-Schema file that defines additional attributes and relationships. May be used to define additional related place types. Usage of this attribute must be agreed upon between Buyer and Seller." + }, + "@type": { + "type": "string", + "description": "This field is used as a discriminator and is used between different place representations. This type might discriminate for additional related place as defined in '@schemaLocation'.\n", + "enum": [ + "FieldedAddress", + "FormattedAddress", + "GeographicAddressLabel", + "GeographicAddressRef", + "GeographicSiteRef", + "MEFGeographicPoint" + ] + }, + "role": { + "type": "string", + "description": "Role of this place" + } + }, + "required": ["@type", "role"] + }, + "GeographicAddressRef": { + "allOf": [ + { + "$ref": "#/components/schemas/RelatedPlaceRefOrValue" + }, + { + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "Hyperlink to the referenced GeographicAddress. Hyperlink MAY be used by the Seller in responses. Hyperlink MUST be ignored by the Seller in case it is provided by the Buyer in a request\n" + }, + "id": { + "type": "string", + "description": "Identifier of the referenced Geographic Address. This identifier is assigned during a successful address validation request (Geographic Address Validation API)" + } + }, + "required": ["id"] + } + ], + "description": "A reference to a Geographic Address resource available through Address Validation API.\n" + }, + "GeographicSiteRef": { + "allOf": [ + { + "$ref": "#/components/schemas/RelatedPlaceRefOrValue" + }, + { + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "Hyperlink to the referenced GeographicSite. Hyperlink MAY be used by the Seller in responses. Hyperlink MUST be ignored by the Seller in case it is provided by the Buyer in a request\n" + }, + "id": { + "type": "string", + "description": "Identifier of the referenced Geographic Site." + } + }, + "required": ["id"] + } + ], + "description": "A reference to a Geographic Site resource available through Service Site API\n" + }, + "MEFProductConfiguration": { + "type": "object", + "description": "MEFProductConfiguration is used as an extension point for MEF specific product/service payload. The `@type` attribute is used as a discriminator", + "discriminator": { + "propertyName": "@type" + }, + "properties": { + "@type": { + "type": "string", + "description": "The name of the type, defined in the JSON schema specified above, for the product that is the subject of the Product Order Request. The named type must be a subclass of MEFProductConfiguration." + } + }, + "required": ["@type"] + }, + "ProductOfferingRef": { + "type": "object", + "description": "A reference to a Product Offering offered by the Seller to the Buyer. A Product Offering contains the commercial and technical details of a Product sold by a particular Seller. A Product Offering defines all of the commercial terms and, through association with a particular Product Specification, defines all the technical attributes and behaviors of the Product. A Product Offering may constrain the allowable set of configurable technical attributes and/or behaviors specified in the associated Product Specification.", + "properties": { + "href": { + "type": "string", + "description": "Hyperlink to a Product Offering in Sellers catalog. In case Seller is not providing a catalog capabilities this field is not used. The catalog API definition is provided by the Seller to the Buyer during onboarding Hyperlink MAY be used by the Seller in responses Hyperlink MUST be ignored by the Seller in case it is provided by the Buyer in a request\n" + }, + "id": { + "type": "string", + "description": "Identifier of a Product Offering. It is assigned by the Seller. The Buyer and the Seller exchange information about offerings' ids during the onboarding process." + } + }, + "required": ["id"] + }, + "ProductRelationship": { + "type": "object", + "description": "A relationship to an existing Product. The requirements for usage for given Product are described in the Product Specification.", + "properties": { + "href": { + "type": "string", + "description": "Hyperlink to the product in Seller's inventory that is referenced Hyperlink MAY be used when providing a response by the Seller Hyperlink MUST be ignored by the Seller in case it is provided by the Buyer in a request" + }, + "id": { + "type": "string", + "description": "unique identifier of the related Product" + }, + "relationshipType": { + "type": "string", + "description": "Specifies the type (nature) of the relationship to the related Product. The nature of required relationships varies for Products of different types. For example, a UNI or ENNI Product may not have any relationships, but an Access E-Line may have two mandatory relationships (related to the UNI on one end and the ENNI on the other). More complex Products such as multipoint IP or Firewall Products may have more complex relationships. As a result, the allowed and mandatory `relationshipType` values are defined in the Product Specification.\n" + } + }, + "required": ["id", "relationshipType"] + }, + "MEFProductRefOrValueOrder": { + "type": "object", + "description": "Used by the Buyer to point to existing and/or describe the desired shape of the product. In case of `add` action - only `productConfiguration` MUST be specified. For `modify` action - both `id` and `productConfiguration` MUST be provided to point which product instance to update and to what state. In `delete` only the `id` must be provided.", + "properties": { + "href": { + "type": "string", + "description": "Hyperlink to the referenced Product. Hyperlink MAY be used by the Seller in responses. Hyperlink MUST be ignored by the Seller in case it is provided by the Buyer in a request." + }, + "id": { + "type": "string", + "description": "The unique identifier of an in-service Product that is the ordering subject. This field MUST be populated if an item `action` is either `modify` or `delete`. This field MUST NOT be populated if an item `action` is `add`." + }, + "place": { + "type": "array", + "description": "The relationships between this Product Order Item and one or more Places as defined in the Product Specification.", + "items": { + "$ref": "#/components/schemas/RelatedPlaceRefOrValue" + } + }, + "productConfiguration": { + "$ref": "#/components/schemas/MEFProductConfiguration" + }, + "productOffering": { + "$ref": "#/components/schemas/ProductOfferingRef" + }, + "productRelationship": { + "type": "array", + "description": "A list of references to existing products that are related to the ordered Product.", + "items": { + "$ref": "#/components/schemas/ProductRelationship" + } + } + } + }, + "ProductOfferingQualificationItemRef": { + "type": "object", + "description": "It's a productOfferingQualification item that has been executed previously.", + "properties": { + "alternateProductOfferingProposalId": { + "type": "string", + "description": "A unique identifier for this Alternate Product Proposal assigned by the Seller." + }, + "id": { + "type": "string", + "description": "Identifier of an item of a product offering qualification" + }, + "productOfferingQualificationHref": { + "type": "string", + "description": "Reference to a related Product Offering Qualification resource." + }, + "productOfferingQualificationId": { + "type": "string", + "description": "Unique identifier of related Product Offering Qualification resource." + } + }, + "required": ["id", "productOfferingQualificationId"] + }, + "OrderItemRelationship": { + "type": "object", + "description": "The relationship between Product Order Items in the Product Order.", + "properties": { + "id": { + "type": "string", + "description": "Identifier of the related Order Item (must be in the same Order)." + }, + "relationshipType": { + "type": "string", + "description": "Specifies the nature of the relationship to the related Product Order Item. A string that is one of the relationship types specified in the Product Specification." + } + }, + "required": ["id", "relationshipType"] + }, + "MEFQuoteItemRef": { + "type": "object", + "description": "It's a Quote item that has been executed previously.", + "properties": { + "id": { + "type": "string", + "description": "Identifier of a Quote Item" + }, + "quoteHref": { + "type": "string", + "description": "Reference of the related Quote." + }, + "quoteId": { + "type": "string", + "description": "Unique identifier of a Quote." + } + }, + "required": ["id", "quoteId"] + }, + "MEFEndOfTermAction": { + "type": "string", + "description": "The action the Seller will take once the term expires. \nRoll indicates that the Product's contract will continue on a rolling basis for the duration of the Roll Interval at the end of the Term. \nAuto-disconnect indicates that the Product will be disconnected at the end of the Term. \nAuto-renew indicates that the Product's contract will be automatically renewed for the Term Duration at the end of the Term.", + "enum": ["roll", "autoDisconnect", "autoRenew"] + }, + "MEFItemTerm": { + "type": "object", + "description": "The term of the Item", + "properties": { + "description": { + "type": "string", + "description": "Description of the term" + }, + "duration": { + "$ref": "#/components/schemas/Duration-2" + }, + "endOfTermAction": { + "$ref": "#/components/schemas/MEFEndOfTermAction" + }, + "name": { + "type": "string", + "description": "Name of the term" + }, + "rollInterval": { + "$ref": "#/components/schemas/Duration-2" + } + }, + "required": ["duration", "endOfTermAction", "name"] + }, + "MEFProductOrderItem_Common": { + "type": "object", + "description": "An identified part of the order. A product order is decomposed into one or more order items. This type holds the attributes common to request and response representation of the Product Order Item.\n", + "properties": { + "action": { + "$ref": "#/components/schemas/MEFProductActionType" + }, + "agreementName": { + "type": "string", + "description": "The name of the Agreement which is referenced for the Product Order Item." + }, + "billingAccount": { + "$ref": "#/components/schemas/MEFBillingAccountRef" + }, + "coordinatedAction": { + "type": "array", + "description": "The interval after the completion of one or more related Product Order Items that this Product Order Item can be started or completed", + "items": { + "$ref": "#/components/schemas/MEFOrderItemCoordinatedAction" + } + }, + "endCustomerName": { + "type": "string", + "description": "The name of the End Customer, either a business name or an individual name depending on the end customer." + }, + "expediteIndicator": { + "type": "boolean", + "default": false, + "description": "Indicates that expedited treatment is requested. Set by the Buyer. If this is set to TRUE, the Buyer sets the Requested Completion Date to the expedited date. See MEF 57.2 section 7.3 for a description of the interaction between the Buyer and the Seller." + }, + "id": { + "type": "string", + "description": "A Buyer provided identifier to identify Product Order Items and to be able to relate them to one another. This is set by the Buyer and is unique within the Product Order. Examples of Reference Identifier could be 1, 2, 3 or A, B, C. The Reference Identifier can be reused in multiple Product Orders to identify a Product Order Item within that Product Order.\n" + }, + "note": { + "type": "array", + "description": "Free form text to clarify or explain the Product Order Item. Only new notes can be entered. The Buyer and Seller cannot modify an existing Note. The Buyer creates a Note when creating the Product Order Item or when updating it. The Seller may add notes at any time. This is not to be used to inform the Seller of Actions that the Buyer wishes performed.\n", + "items": { + "$ref": "#/components/schemas/Note" + } + }, + "product": { + "$ref": "#/components/schemas/MEFProductRefOrValueOrder" + }, + "productOfferingQualificationItem": { + "$ref": "#/components/schemas/ProductOfferingQualificationItemRef" + }, + "productOrderItemRelationship": { + "type": "array", + "description": "The relationship between Product Order Items in the Product Order.", + "items": { + "$ref": "#/components/schemas/OrderItemRelationship" + } + }, + "quoteItem": { + "$ref": "#/components/schemas/MEFQuoteItemRef" + }, + "relatedBuyerPON": { + "type": "string", + "description": "Identifies the Buyer Purchase Order Number that is related to this Product Order." + }, + "relatedContactInformation": { + "type": "array", + "description": "Contact information of an individual or organization playing a role for this Order Item.\nThe rule for mapping a represented attribute\nvalue to a `role` is to use the _lowerCamelCase_ pattern e.g.\n- Buyer Product Order Item Contact: `role=buyerProductOrderItemContact`\n- Buyer Implementation Contact: `role=buyerImplementationContact`\n- Buyer Technical Contact: `role=buyerTechnicalContact`\n- Buyer Billing Contact: `role=buyerBillingContact`\n- Buyer Fault Contact: `role=buyerFaultContact`\n- Seller Fault Contact: `role=sellerFaultContact`\n- Buyer GDPR Contact: `role=buyerGDPRContact`\n- Seller GDPR Contact: `role=sellerGDPRContact`", + "items": { + "$ref": "#/components/schemas/RelatedContactInformation" + } + }, + "requestedCompletionDate": { + "type": "string", + "format": "date-time", + "description": "Identifies the Buyer's desired due date (requested delivery date)" + }, + "requestedItemTerm": { + "$ref": "#/components/schemas/MEFItemTerm" + }, + "tspRestorationPriority": { + "type": "string", + "description": "Within the United States, indicates the provisioning and restoration priority as defined under the TSP Service Vendor Handbook. The valid values are defined in ATIS OBF document: ATIS-0404001.\n" + } + }, + "required": ["action", "id"] + }, + "MEFProductOrderItem_Create": { + "allOf": [ + { + "$ref": "#/components/schemas/MEFProductOrderItem_Common" + }, + { + "type": "object", + "description": "An identified part of the order. A product order is decomposed into\none or more order items. \nThe modelling pattern introduces the `Common` supertype to\naggregate attributes that are common to both `ProductOrderItem` and\n`ProductOrderItem_Create`. The `Create` type has a subset of\nattributes of the response type and does not introduce any new,\nthus the `Create` type has an empty definition.\n" + } + ] + }, + "ProductOrder_Create": { + "allOf": [ + { + "$ref": "#/components/schemas/ProductOrder_Common" + }, + { + "type": "object", + "description": "A Product Order is a type of order which can be used to place an order between a customer and a service provider or between a service provider and a partner and vice versa, Skipped properties: id,href,completionDate,orderDate,state,stateChange,cancellationDate,cancellationReason\n", + "properties": { + "productOrderItem": { + "type": "array", + "description": "Items contained in the Product Order.\n", + "items": { + "$ref": "#/components/schemas/MEFProductOrderItem_Create" + }, + "minItems": 1 + } + }, + "required": ["productOrderItem"] + } + ] + }, + "MEFProductOrderChargeRef": { + "type": "object", + "description": "A reference to a Charge instance", + "properties": { + "href": { + "type": "string", + "description": "Hyperlink to access the Charge" + }, + "id": { + "type": "string", + "description": "A unique identifier of the Charge" + } + }, + "required": ["id"] + }, + "MEFMilestone": { + "type": "object", + "description": "Milestones associated to the Product Order Item. Set by the Seller when a Milestone occurs.", + "properties": { + "date": { + "type": "string", + "format": "date-time", + "description": "The date on when the milestone was reached" + }, + "name": { + "type": "string", + "description": "Name of the Milestone." + }, + "note": { + "type": "string", + "description": "Additional comment related to milestone change." + } + }, + "required": ["date", "name"] + }, + "MEFProductOrderItemStateType": { + "type": "string", + "description": "Possible values for the state of the Product Order Item The following\nmapping has been used between `MEFProductOrderItemStateType` and MEF\n57.2:\n\n| state | MEF 57.2 name | Description |\n| --------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| `acknowledged` | ACKNOWLEDGED | A Product Order Item has been received and has passed basic business validations. From the `acknowledged` state the Product Order Item is further validated and depending on the results of the validation and if other Product Order Items in the Product Order are also validated the Product Order Item moves to `inProgress`, `rejected.validated`, or `rejected.unassessed`. |\n| `cancelled` | CANCELLED | The Product Order has moved to the `pendingCancellation` state. All Product Order Items move to `cancelled`. |\n| `completed` | COMPLETED | The Product Order Item has completed provisioning. This is an end state |\n| `failed` | FAILED | The fulfillment of a Product Order Item has failed. A Product Order Item may fail because the Buyer declined a Blocking charge identified via the Charge, the Buyer failed to respond to a Charge Item included in a Charge, or the Seller is unable to fulfill the Product Order Item. A Product Order Item moving to `failed` state results in the Product Order State being `failed` or `partial`. This is a terminal state. |\n| `held` | HELD | The Product Order Item cannot be progressed due to Charge the Seller awaiting a response from the Buyer on a Charge. The Seller stops work on the Product Order Item until the Charge has completed. Upon acceptance by the Buyer of all Blocking charges, the Product Order Item returns to `inProgress` state If the Buyer rejects a Blocking charge, the Product Order Item moves to the `failed` state. |\n| `inProgress` | IN_PROGRESS | The Product Order Item has been successfully validated and fulfillment has started. If the Seller's system links validation between Product Order Items in a Product Order, a Product Order Item in this state also indicates that the other Product Order Items passed validation. |\n| `pending` | PENDING | The Product Order Item cannot be progressed due to the Seller assessing a Cancel Product Order or Modify Product Order Item Requested Delivery Date request. The Seller stops work on the Product Order Item until either the Cancel Product Order has been accepted and the Product Order state moves to `pendingCancellation` and the Product Order Item state moves to `cancelled`, the Cancel Product Order has been rejected and the Product Order Item State moves to `inProgress`, the Modify Product Order Item Requested Delivery Date has been accepted and the Product Order Item State moves to `inProgress`, or the Modify Product Order Item Requested Delivery Date moves to `done.declined` and the Product Order Item state moves to `inProgress` with original delivery dates. |\n| `rejected` | REJECTED | A Product Order Item was submitted, and it has failed at least one validation checks the Seller performs during the `acknowledged` state. |\n| `rejected.unassessed` | UNASSESSED | A Product Order was submitted and all validation checks the Seller performs during the `acknowledged` state have not been completed, but another Product Order Item in the Product Order has moved to the `rejected` state. |\n| `rejected.validated` | VALIDATED | A Product Order was submitted, and it has passed all validation checks the Seller performs during the `acknowledged` state, but another Product Order Item in the Product Order has moved to the `rejected` state |\n", + "enum": [ + "acknowledged", + "cancelled", + "completed", + "failed", + "held", + "inProgress", + "pending", + "rejected", + "rejected.validated", + "rejected.unassessed" + ] + }, + "MEFProductOrderItemStateChange": { + "type": "object", + "description": "Holds the State notification reasons and associated date the State changed, populated by the server", + "properties": { + "changeDate": { + "type": "string", + "format": "date-time", + "description": "The date on when the state was reached" + }, + "changeReason": { + "type": "string", + "description": "Additional comment related to state change." + }, + "state": { + "$ref": "#/components/schemas/MEFProductOrderItemStateType" + } + } + }, + "TerminationError": { + "type": "object", + "description": "This indicates an error that caused an Item to be terminated. The code and propertyPath should be used like in Error422.", + "properties": { + "code": { + "$ref": "#/components/schemas/Error422Code" + }, + "propertyPath": { + "type": "string", + "description": "A pointer to a particular property of the payload that caused the validation issue. It is highly recommended that this property should be used.\nDefined using JavaScript Object Notation (JSON) Pointer (https://tools.ietf.org/html/rfc6901).\n" + }, + "value": { + "type": "string", + "description": "Text to describe the reason of the termination." + } + } + }, + "ProductOrderItem": { + "allOf": [ + { + "$ref": "#/components/schemas/MEFProductOrderItem_Common" + }, + { + "type": "object", + "description": "An identified part of the order. A product order is decomposed into one or more order items.\n", + "properties": { + "charge": { + "type": "array", + "description": "The Charges associated to this Product Order Item. This list contains all completed Charges containing accepted Charge Items initiated by the Seller. Any Charge that is withdrawn or containing all declined Charge Items must not be included in this list.", + "items": { + "$ref": "#/components/schemas/MEFProductOrderChargeRef" + } + }, + "completionDate": { + "type": "string", + "format": "date-time", + "description": "Identifies the date the Seller completed the Product Order Item. Set by Seller when all Product Order Items have reached a terminal state. No further action is permitted on the Product Order after this state is reached." + }, + "expectedCompletionDate": { + "type": "string", + "format": "date-time", + "description": "Identifies the date the Seller expects to complete the Product Order Item.\n" + }, + "expediteAcceptedIndicator": { + "type": "boolean", + "default": false, + "description": "Indicates if the Seller has accepted the Buyer's Expedite request. See MEF 57.2 section 7.3 for a description of the interaction between the Buyer and Seller. If this is set to true, the Seller provides the costs to expedite the Product Order in the charge attribute" + }, + "itemTerm": { + "type": "array", + "description": "Term of the Product Order Item", + "items": { + "$ref": "#/components/schemas/MEFItemTerm" + }, + "maxItems": 1 + }, + "milestone": { + "type": "array", + "description": "Milestones associated to the Product Order Item. Set by the Seller when a Milestone occurs.", + "items": { + "$ref": "#/components/schemas/MEFMilestone" + } + }, + "state": { + "$ref": "#/components/schemas/MEFProductOrderItemStateType" + }, + "stateChange": { + "type": "array", + "description": "State change for the Product Order Item", + "items": { + "$ref": "#/components/schemas/MEFProductOrderItemStateChange" + } + }, + "terminationError": { + "type": "array", + "description": "When the Seller cannot process the request, the Seller returns a text-based list of reasons here.", + "items": { + "$ref": "#/components/schemas/TerminationError" + } + } + } + } + ] + }, + "MEFProductOrderStateType": { + "type": "string", + "description": "Possible values for the state of the Product Order The following\nmapping has been used between `MEFProductOrderStateType` and MEF 57.2:\n\n| state | MEF 57.2 name | Description |\n| ------------------------------- | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `acknowledged` | ACKNOWLEDGED | A Product Order has been received by the Seller and has passed basic validation. A `productOrder.id` is assigned in the `acknowledged` state and a response is returned to the Buyer. The Product Order remains in the `acknowledged` state while validations of Product Order and Product Order Item(s) attributes as applicable is completed. If the Product Order and Product Order Item attributes are validated the Product Order moves to the `inProgress` state. If not validated, the Product Order moves to the `rejected` state. |\n| `assessingCancellation` | ASSESSING_CANCELLATION | A Cancel Product Order request has been received by the Seller. The Product Order is being assessed to determine if the Product Order can be cancelled. If there are charges associated with cancelling the Product Order, these are communicated to the Buyer using the Charge process. The Product Order remains in the `assessingCancellation` state until any relevant Charge is completed or withdrawn by the Seller. Once the Buyer's request has been validated and any associated Charges completed, the Product Order moves to the `pendingCancellation` state. If the request is not validated or if any associated Charges are not completed, the Product Order moves to the `inProgress` state and the Product Order is not cancelled. |\n| `held.assessingCharge` | ASSESSING_CHARGE | A Charge has been initiated by the Seller that is not the result of a Modify Product Order Item Requested Delivery Date or Cancel Product Order request and the Seller is awaiting a Buyer response to the Charge. If a blocking or non-blocking charge is accepted by the Buyer, the Product Order moves to `inProgress`. If a non-blocking charge is declined by the Buyer, the Product Order moves to `inProgress`. If a blocking charge is declined by the Buyer and there are no unrelated Product Order Items in the Product Order, the Product Order moves to the `inProgress` and then to the `failed` state. If a blocking charge is declined by the Buyer and there are unrelated Product Order Items in the Product Order, the Product Order moves to the `inProgress` state. |\n| `pending.assessingModification` | ASSESSING_MODIFICATION | A request has been made by the Buyer to modify either the `expediteIndicator` or the `requestedCompletionDate` of a Product Order Item. The Product Order Item is currently being assessed to determine whether the Modify Product Order Item Requested Delivery Date is valid. If there is a charge associated with the Modify Product Order Item Requested Delivery Date, the Product Order remains in the `pending.assessingModification` state until the Charge is completed or withdrawn by the Seller. Once the Buyer's request has been validated and any associated Charges completed, the Product Order returns to the `inProgress` state. |\n| `cancelled` | CANCELLED | The Product Order has been successfully cancelled. This is a terminal state. |\n| `pendingCancellation` | CANCELLING | The Buyer's Cancel Request has been assessed and it has been determined that it is feasible to proceed with the cancellation. This state can also result from a Seller cancelling the Product Order within their systems without a request from the Buyer. |\n| `completed` | COMPLETED | The Product Order has completed fulfillment and the Product is now active. This is a terminal state |\n| `failed` | FAILED | All Product Order Items have failed which results in the entire Product Order failing. This is a terminal state. |\n| `inProgress` | IN_PROGRESS | The Product Order has been successfully validated, and fulfillment has started. |\n| `partial` | PARTIAL | Fulfillment of at least one Product Order Item has failed, and fulfillment of at least one Product Order Item has been successful. This is a terminal state. |\n| `rejected` | REJECTED | A Product Order was submitted, and it has failed at least one of the validation checks the Seller performs after it reached the `acknowledged` state |\n", + "enum": [ + "acknowledged", + "assessingCancellation", + "cancelled", + "completed", + "failed", + "held.assessingCharge", + "inProgress", + "partial", + "pending.assessingModification", + "pendingCancellation", + "rejected" + ] + }, + "MEFProductOrderStateChange": { + "type": "object", + "description": "Holds the State notification reasons and associated date the State changed, populated by the server", + "properties": { + "changeDate": { + "type": "string", + "format": "date-time", + "description": "The date on which the state was reached" + }, + "changeReason": { + "type": "string", + "description": "Additional comment related to state change" + }, + "state": { + "$ref": "#/components/schemas/MEFProductOrderStateType" + } + } + }, + "ProductOrder": { + "allOf": [ + { + "$ref": "#/components/schemas/ProductOrder_Common" + }, + { + "type": "object", + "description": "A Product Order is a type of order which can be used to place an order between a customer and a service provider or between a service provider and a partner and vice versa", + "properties": { + "cancellationCharge": { + "type": "array", + "description": "Charges associated with cancelling the Product Order", + "items": { + "$ref": "#/components/schemas/MEFProductOrderChargeRef" + } + }, + "cancellationDate": { + "type": "string", + "format": "date-time", + "description": "Identifies the date the Seller cancelled the Order. Set by Seller when the Order is moved to the cancelled state." + }, + "cancellationReason": { + "type": "string", + "description": "An optional free-form text field for the Seller to provide additional information regarding the reason for the cancellation. If the Seller cancels the Product Order, the Seller provides the reason. If the Buyer requests the cancellation, the Seller copies the reason provided by the Buyer from the Cancel Product Order request." + }, + "completionDate": { + "type": "string", + "format": "date-time", + "description": "Identifies the date that all Product Order Items within the Order have reached a terminal state. No further action is permitted on the Product Order." + }, + "href": { + "type": "string", + "description": "Hyperlink to access the order" + }, + "id": { + "type": "string", + "description": "Unique identifier for the Product Order that is generated by the Seller when the Product Order is initially accepted via an API." + }, + "orderDate": { + "type": "string", + "format": "date-time", + "description": "Date when the Product Order was created in the Seller's system and a Product Order Identifier was assigned" + }, + "productOrderItem": { + "type": "array", + "description": "Items contained in the Product Order.\n", + "items": { + "$ref": "#/components/schemas/ProductOrderItem" + }, + "minItems": 1 + }, + "state": { + "$ref": "#/components/schemas/MEFProductOrderStateType" + }, + "stateChange": { + "type": "array", + "description": "State change for the Product Order", + "items": { + "$ref": "#/components/schemas/MEFProductOrderStateChange" + } + } + }, + "required": ["id", "orderDate", "productOrderItem", "state"] + } + ] + }, + "MEFBuyerQuoteLevel": { + "description": "An indication of whether the Buyer's Quote Request is for a Budgetary or Firm Quote Level. Set by the Buyer. Buyer Requested Quote Level contains the possible values and may be set by the Buyer on the Request. All Quote Items in a Quote have the same Quote Level.", + "enum": ["budgetary", "firm"], + "type": "string" + }, + "Quote_Common": { + "description": "Quote can be used to negotiate service and product acquisition or modification between a customer and a service provider. Quote contains a list of quote items, a reference to a customer, a list of productOfferings, and attached prices and conditions.", + "properties": { + "note": { + "description": "Free form text associated with the quote. Only useful in processes involving human interaction. Not applicable for the automated process.", + "items": { + "$ref": "#/components/schemas/Note" + }, + "type": "array" + }, + "requestedQuoteCompletionDate": { + "description": "This is requested date - from quote requester - to get a complete response for this quote", + "format": "date-time", + "type": "string" + }, + "relatedContactInformation": { + "description": "Party playing a role for this quote. If `instantSyncQuote` equals `false` \nthen the Buyer MUST specify Buyer Contact Information ('role: buyerContactInformation') \nand the Seller MUST specify Seller Contact Information ('role: sellerContactInformation')", + "items": { + "$ref": "#/components/schemas/RelatedContactInformation" + }, + "type": "array" + }, + "description": { + "description": "Description of the quote", + "type": "string" + }, + "externalId": { + "description": "ID given by the consumer and only understandable by him (to facilitate his searches afterwards)", + "type": "string" + }, + "buyerRequestedQuoteLevel": { + "description": "An indication of whether the Buyer's Quote request is for a Quote of Budgetary or Firm level.", + "$ref": "#/components/schemas/MEFBuyerQuoteLevel" + }, + "projectId": { + "description": "An identifier that is used to group Quotes that represent a unit of functionality that is important to a Buyer. A Project can be used to relate multiple Quotes together.", + "type": "string" + }, + "instantSyncQuote": { + "description": "If this flag is set to true, the Buyer requests an immediate Quote to be provided in the response to the creation of a Quote.", + "type": "boolean" + } + }, + "required": ["buyerRequestedQuoteLevel", "instantSyncQuote"], + "type": "object" + }, + "ProductRelationshipWithGrouping": { + "description": "A relationship to an existing Product. The requirements for usage for given Product are described in the Product Specification. The \"WithGrouping\" flavor of the Product Relationship allows for providing a list of related product identifiers within a single Product Relationship. This can be later used while processing the request as defined in the Product Specification. The `groupingKey` attribute is used to achieve this behavior in the API by marking the list of `ProductRelationshipWithGroupings` within a `product` with a common key.", + "properties": { + "relationshipType": { + "description": "Specifies the type (nature) of the relationship to the related Product. The nature of required relationships varies for Products of different types. For example, a UNI or ENNI Product may not have any relationships, but an Access E-Line may have two mandatory relationships (related to the UNI on one end and the ENNI on the other). More complex Products such as multipoint IP or Firewall Products may have more complex relationships. As a result, the allowed and mandatory `relationshipType` values are defined in the Product Specification.\n", + "type": "string" + }, + "id": { + "description": "unique identifier of a Product that is referenced.", + "type": "string" + }, + "href": { + "description": "Hyperlink to the product in Seller's inventory that is referenced Hyperlink MAY be used when providing a response by the Seller Hyperlink MUST be ignored by the Seller in case it is provided by the Buyer in a request", + "type": "string" + }, + "groupingKey": { + "description": "MEF 80 Introduces a list of related ids for the ProductRelationship. For sake of TMF compliance, a `groupingKey` is introduced to retain id as a simple attribute. Ids from relationships having the same `groupingKey` and `relationshipType` MUST be treated as a list of identifiers.\nReference: MEF 80 (Sn 8.1.8.)\n", + "type": "string" + } + }, + "required": ["id", "relationshipType"], + "type": "object" + }, + "MEFProductRefOrValueQuote": { + "description": "One or more services sold to a Buyer by a Seller. A particular Product Offering defines the technical and commercial attributes and behaviors of a Product.", + "properties": { + "id": { + "description": "The unique identifier of an in-service Product that is the quotation's subject. This field MUST be populated if an item `action` is either `modify` or `delete`. This field MUST NOT be populated if an item `action` is `add`.\n", + "type": "string" + }, + "href": { + "description": "Hyperlink to the product in Seller's inventory that is the quotation's subject. Hyperlink MAY be used when providing a response by the Seller. Hyperlink MUST be ignored by the Seller in case it is provided by the Buyer in a request\n", + "type": "string" + }, + "place": { + "description": "A list of places that are related to the Product. For example an installation location", + "items": { + "$ref": "#/components/schemas/RelatedPlaceRefOrValue" + }, + "type": "array" + }, + "productConfiguration": { + "description": "Technical attributes for the Product that would be delivered to fulfill the Quote Item.", + "$ref": "#/components/schemas/MEFProductConfiguration" + }, + "productOffering": { + "description": "A particular Product Offering defines the technical and commercial attributes and behaviors of a Product.", + "$ref": "#/components/schemas/ProductOfferingRef" + }, + "productRelationship": { + "description": "A list of references to existing products that are related to the Product that would be delivered to fulfill the Quote Item", + "items": { + "$ref": "#/components/schemas/ProductRelationshipWithGrouping" + }, + "type": "array" + } + }, + "type": "object" + }, + "QuoteItemRelationship": { + "description": "Used to describe the relationship between quote items. These relationships could have an impact on pricing and conditions", + "properties": { + "relationshipType": { + "description": "Relationship type as relies on, bundles, etc... MEF: Specifies the nature of the relationship to the related Quote Items. The nature of required relationships varies for Products of different types. For example, a UNI or ENNI Product may not have any relationships, but an Access E-Line may have two mandatory relationships (related to the UNI on one end and the ENNI on the other). More complex Products such as multipoint IP or Firewall Products may have more complex relationships. As a result, the allowed and mandatory Relationship Nature values are defined in the Product Specification.", + "type": "string" + }, + "id": { + "description": "ID of the related quote item (must be in the same quote)", + "type": "string" + } + }, + "required": ["id", "relationshipType"], + "type": "object" + }, + "MEFQuoteItem_Common": { + "description": "Quote items describe an action to be performed on a productOffering or a product in order to get pricing elements and conditions.", + "properties": { + "requestedQuoteItemTerm": { + "description": "The terms of the Quote Item. Used to describe a term (also known as commitment) for a Quote Item. Each Quote Item in a Quote Request could have a different Requested Quote Item Term. The Buyer specifies the longest term that they would accept. The Buyer may be willing to accept a shorter term. If the Seller responds with a term longer than the Buyer's request, it is treated as an alternate response.", + "$ref": "#/components/schemas/MEFItemTerm" + }, + "note": { + "description": "Free form text associated with the quote item. Only useful in processes involving human interaction. Not applicable for the automated process.", + "items": { + "$ref": "#/components/schemas/Note" + }, + "type": "array" + }, + "product": { + "description": "The Buyer's existing Product for which the quote is being requested.", + "$ref": "#/components/schemas/MEFProductRefOrValueQuote" + }, + "productOfferingQualificationItem": { + "description": "A reference to a previously done POQ with item specified", + "$ref": "#/components/schemas/ProductOfferingQualificationItemRef" + }, + "relatedContactInformation": { + "description": "Contact information of an individual or organization playing a role for this Quote. If `instantSyncQuote` equals `false` then 'Quote Item Technical Contact' must be specified (`role: quoteItemTechnicalContact`). If `instantSyncQuote` equals `false` and the Quote Item requires a location, the Buyer MUST provide the Quote Item Location Contact Information `role: quoteItemLocationContact`.\n", + "items": { + "$ref": "#/components/schemas/RelatedContactInformation" + }, + "type": "array" + }, + "agreementName": { + "description": "Name of the agreement. The name is unique between the Buyer and the Seller.", + "type": "string" + }, + "action": { + "description": "Product action to be applied to this Quote Item. This corresponds to the Order Item Action when an associated product is ordered.", + "$ref": "#/components/schemas/MEFProductActionType" + }, + "dealReference": { + "description": "A pre-agreed pricing modifier reference that the Seller is offering to the Buyer which will impact the price.", + "type": "string" + }, + "id": { + "description": "Identifier of the quote item (generally it is a sequence number 01, 02, 03, ...)", + "type": "string" + }, + "requestedQuoteItemInstallationInterval": { + "description": "The installation interval requested by the Buyer.", + "$ref": "#/components/schemas/Duration-2" + }, + "quoteItemRelationship": { + "description": "A relationship from item within a quote", + "items": { + "$ref": "#/components/schemas/QuoteItemRelationship" + }, + "type": "array" + } + }, + "required": ["action", "id"], + "type": "object" + }, + "MEFQuoteItem_Create": { + "allOf": [ + { + "$ref": "#/components/schemas/MEFQuoteItem_Common" + }, + { + "description": "A quote item describes an action to be performed on a productOffering or a product in order to get pricing elements and condition. The modeling pattern introduces the `MEFQuoteItem_Common` supertype to aggregate attributes that are common to both `QuoteItem` and `MEFQuoteItem_Create`. In this case the create type has a subset of attributes of the response type and does not introduce any new, thus the `MEFQuoteItem_Create` type has an empty definition.", + "type": "object" + } + ] + }, + "Quote_Create": { + "allOf": [ + { + "$ref": "#/components/schemas/Quote_Common" + }, + { + "description": "Quote can be used to negotiate service and product acquisition or modification between a customer and a service provider. Quote contains a list of quote items, a reference to a customer, a list of productOfferings, and attached prices and conditions.\n", + "properties": { + "quoteItem": { + "description": "An item of the quote - used to describe an operation on a product to be quoted", + "items": { + "$ref": "#/components/schemas/MEFQuoteItem_Create" + }, + "minItems": 1, + "type": "array" + } + }, + "required": ["quoteItem"], + "type": "object" + } + ] + }, + "TimePeriod": { + "description": "A period of time, either as a deadline (endDateTime only) a startDateTime only, or both.", + "properties": { + "startDateTime": { + "description": "Start of the time period, using IETC-RFC-3339 format. If you define a start, you must also define an end", + "example": "1985-04-12T23:20:50.520Z", + "format": "date-time", + "type": "string" + }, + "endDateTime": { + "description": "End of the time period, using IETC-RFC-3339 format", + "example": "1985-04-12T23:20:50.520Z", + "format": "date-time", + "type": "string" + } + }, + "type": "object" + }, + "MEFSellerQuoteLevel": { + "description": "An indication of whether the Seller's Quote Response is Budgetary, Firm - Subject to Feasibility Check, or Firm. The Seller Quote Level is provided by the Seller when responding to a Quote request. This represents the lowest Quote Item Level of all Quote Items included in the Quote.", + "enum": ["budgetary", "firmSubjectToFeasibilityCheck", "firm"], + "type": "string" + }, + "MEFQuoteItemStateType": { + "description": "Possible values for the status of a QuoteItem.\nFollowing mapping has been used between `MEFQuoteItemStateType` and MEF 80:\n\n| MEFQuoteItemStateType | MEF 80 |\n| ----------------------------| --------------------------------- |\n| answered | ANSWERED |\n| acknowledged | ACKNOWLEDGED |\n| approved.orderable | ORDERABLE |\n| approved.orderableAlternate | ORDERABLE_ALTERNATE |\n| inProgress | IN_PROGRESS |\n| inProgress.draft | IN_PROGRESS_DRAFT |\n| abandoned | ABANDONED |\n| rejected | REJECTED |\n| unableToProvide | UNABLE_TO_PROVIDE |\n", + "enum": [ + "answered", + "acknowledged", + "approved.orderable", + "approved.orderableAlternate", + "inProgress", + "inProgress.draft", + "rejected", + "abandoned", + "unableToProvide" + ], + "type": "string" + }, + "Money": { + "type": "object", + "description": "A base / value business entity used to represent money", + "properties": { + "unit": { + "type": "string", + "description": "Currency (ISO4217 norm uses 3 letters to define the currency)" + }, + "value": { + "type": "number", + "format": "float", + "description": "A positive floating point number" + } + } + }, + "Price": { + "type": "object", + "description": "Provides all amounts (tax included, duty free, tax rate), used currency and percentage to apply for Price Alteration.", + "properties": { + "dutyFreeAmount": { + "$ref": "#/components/schemas/Money" + }, + "taxIncludedAmount": { + "$ref": "#/components/schemas/Money" + }, + "taxRate": { + "type": "number", + "format": "float", + "description": "Price Tax Rate. Unit: [%]. E.g. value 16 stand for 16% tax." + } + }, + "required": ["dutyFreeAmount"] + }, + "MEFPriceType": { + "type": "string", + "description": "Indicates if the price is for recurring or non-recurring charges.", + "enum": ["recurring", "nonRecurring", "usageBased"] + }, + "MEFChargePeriod": { + "type": "string", + "description": "Used for a recurring charge to indicate period.", + "enum": ["hour", "day", "week", "month", "year"] + }, + "QuotePrice": { + "description": "Description of price and discount awarded", + "properties": { + "unitOfMeasure": { + "description": "Unit of Measure if price depending on it (Gb, SMS volume, etc..) MEF: if Quote Item Price Type equals usageBased", + "type": "string" + }, + "price": { + "description": "The associated price", + "$ref": "#/components/schemas/Price" + }, + "name": { + "description": "Name of the quote/quote item price", + "type": "string" + }, + "priceType": { + "description": "Indicates if the price is for recurring, non-recurring, or usage based charges", + "$ref": "#/components/schemas/MEFPriceType" + }, + "description": { + "description": "Description of the quote/quote item price", + "type": "string" + }, + "recurringChargePeriod": { + "description": "Used for a recurring charge to indicate a period", + "$ref": "#/components/schemas/MEFChargePeriod" + } + }, + "type": "object" + }, + "QuoteItem": { + "allOf": [ + { + "$ref": "#/components/schemas/MEFQuoteItem_Common" + }, + { + "description": "Quote items describe an action to be performed on a productOffering or a product in order to get pricing elements and conditions.", + "properties": { + "terminationError": { + "description": "When the Seller cannot process the Quote Item Request, the Seller returns a text-based list of reasons here.", + "items": { + "$ref": "#/components/schemas/TerminationError" + }, + "type": "array" + }, + "quoteItemInstallationInterval": { + "description": "Quote Item Installation Interval as proposed by the Seller for the Quote.", + "$ref": "#/components/schemas/Duration-2" + }, + "subjectToFeasibilityCheck": { + "description": "For a Firm Quote Level indicates if the pricing requires a Feasibility Check. The Seller indicates if the Quote Item requires a Feasibility Check. This is not used for a Budgetary Quote Level.", + "type": "boolean" + }, + "quoteItemTerm": { + "description": "Quote Item Term as defined by the Seller and part of the Quote for the Quote Item.", + "items": { + "$ref": "#/components/schemas/MEFItemTerm" + }, + "maxItems": 1, + "type": "array" + }, + "state": { + "description": "The state of the Quote Item.", + "$ref": "#/components/schemas/MEFQuoteItemStateType" + }, + "quoteItemPrice": { + "description": "Price for this quote item", + "items": { + "$ref": "#/components/schemas/QuotePrice" + }, + "type": "array" + } + }, + "required": ["state"], + "type": "object" + } + ] + }, + "MEFQuoteStateType": { + "description": "Possible values for the status of a Quote.\nFollowing mapping has been used between `MEFQuoteStateType` and MEF 80:\n\n | QuoteStateType | MEF 80 |\n | ----------------------------------------- | --------------------------------- |\n | accepted | ACCEPTED |\n | acknowledged | ACKNOWLEDGED |\n | answered | ANSWERED |\n | approved.orderable | ORDERABLE |\n | approved.orderableAlternate | ORDERABLE_ALTERNATE |\n | declined | DECLINED |\n | expired | EXPIRED |\n | cancelled | CANCELLED |\n | unableToProvide | UNABLE_TO_PROVIDE |\n | inProgress | IN_PROGRESS |\n | inProgress.draft | IN_PROGRESS_DRAFT |\n | rejected | REJECTED |\n", + "enum": [ + "accepted", + "acknowledged", + "answered", + "approved.orderable", + "approved.orderableAlternate", + "cancelled", + "unableToProvide", + "declined", + "expired", + "inProgress", + "inProgress.draft", + "rejected" + ], + "type": "string" + }, + "MEFQuoteStateChange": { + "description": "Holds the reached state, reasons, and associated date the Quote state changed, populated by the Seller.", + "properties": { + "changeReason": { + "description": "Additional comment related to state change", + "type": "string" + }, + "changeDate": { + "description": "The date on when the state was reached", + "format": "date-time", + "type": "string" + }, + "state": { + "description": "A state reached at the change date", + "$ref": "#/components/schemas/MEFQuoteStateType" + } + }, + "required": ["changeDate", "state"], + "type": "object" + }, + "Quote": { + "allOf": [ + { + "$ref": "#/components/schemas/Quote_Common" + }, + { + "description": "Quote can be used to negotiate service and product acquisition or modification between a customer and a service provider. Quote contains a list of quote items, a reference to a customer, a list of productOfferings, and attached prices and conditions.", + "properties": { + "effectiveQuoteCompletionDate": { + "description": "Date when the Quote State was set to one of the Completion States.", + "format": "date-time", + "type": "string" + }, + "expectedQuoteCompletionDate": { + "description": "This is the date provided by the Seller to indicate the date by which the Quote is expected to reach a Quote Completion State", + "format": "date-time", + "type": "string" + }, + "validFor": { + "description": "Quote validity period. For use in the context of this attribute, only the endDateTime attribute must be used.", + "$ref": "#/components/schemas/TimePeriod" + }, + "quoteLevel": { + "description": "An indication of whether the Seller's Quote Response is Budgetary, Firm - Subject to Feasibility Check, or Firm. The Seller Quote Level is provided by the Seller when responding to a Quote request. This represents the lowest Quote Item Level of all Quote Items included in the Quote.", + "$ref": "#/components/schemas/MEFSellerQuoteLevel" + }, + "quoteItem": { + "description": "An item of the quote - it is used to describe an operation on a product to be quoted", + "items": { + "$ref": "#/components/schemas/QuoteItem" + }, + "minItems": 1, + "type": "array" + }, + "stateChange": { + "description": "State change for the Quote", + "items": { + "$ref": "#/components/schemas/MEFQuoteStateChange" + }, + "type": "array" + }, + "id": { + "description": "Unique identifier - attributed by quoting system", + "type": "string" + }, + "href": { + "description": "Hyperlink representing this Quote. Hyperlink MAY be used when providing a response by the Seller\n", + "type": "string" + }, + "state": { + "description": "The state of the Quote.", + "$ref": "#/components/schemas/MEFQuoteStateType" + }, + "quoteDate": { + "description": "Date and time when the quote was created", + "format": "date-time", + "type": "string" + } + }, + "required": ["id", "quoteDate", "quoteItem"], + "type": "object" + } + ] + }, + "ProductSpecificationRef": { + "type": "object", + "description": "A reference to a structured set of well-defined technical attributes and/or behaviors that are used to construct a Product Offering for sale to a market.", + "properties": { + "href": { + "type": "string", + "description": "Hyperlink to a Product Specification in Sellers catalog. In case Seller is not providing a catalog API this field is not used. The catalog is provided by the Seller to the Buyer during onboarding.\n" + }, + "id": { + "type": "string", + "description": "Unique identifier of the Product specification" + } + }, + "required": ["id"] + }, + "RelatedGeographicSite": { + "type": "object", + "description": "A Geographic Site and an associated role as installation address, delivery address, etc....", + "properties": { + "role": { + "type": "string", + "description": "Role of the geographic site, such as: [home delivery], [shop retrieval]) MEF: The role that the Site plays, e.g. Billing Address, UNI Site, or ENNI Site." + }, + "id": { + "type": "string", + "description": "Unique identifier of the geographic site" + }, + "href": { + "type": "string", + "description": "Hyperlink to the referenced geographic site" + } + }, + "required": ["id", "role"] + }, + "MEFProductOrderItemRef": { + "type": "object", + "description": "It's a ProductOrder item", + "properties": { + "productOrderHref": { + "type": "string", + "description": "Reference of the related ProductOrder." + }, + "productOrderId": { + "type": "string", + "description": "Unique identifier of a ProductOrder." + }, + "productOrderItemId": { + "type": "string", + "description": "Identifier of an Item within the Product Order" + } + }, + "required": ["productOrderId", "productOrderItemId"] + }, + "MEFProductStatusType": { + "type": "string", + "description": "Possible values for the status of a MEF Product\n\n| name | MEF 81 name |\n| --------------------------- | --------------------------- |\n| `active` | ACTIVE |\n| `active.pendingChange` | ACTIVE_PENDING_CHANGE |\n| `pendingTerminate` | ACTIVE_PENDING_TERMINATE |\n| `cancelled` | CANCELLED |\n| `pendingActive` | PENDING |\n| `suspended` | SUSPENDED |\n| `suspendedPendingTerminate` | SUSPENDED_PENDING_TERMINATE |\n| `terminated` | TERMINATED |", + "enum": [ + "active", + "active.pendingChange", + "cancelled", + "pendingActive", + "pendingTerminate", + "suspended", + "suspendedPendingTerminate", + "terminated" + ] + }, + "MEFProduct_Find": { + "type": "object", + "description": "Class used to provide Product overview retrieved in GET (by list) operation", + "properties": { + "productSpecification": { + "$ref": "#/components/schemas/ProductSpecificationRef" + }, + "relatedSite": { + "type": "array", + "description": "Reference to a Site where the Product is provided.", + "items": { + "$ref": "#/components/schemas/RelatedGeographicSite" + } + }, + "productOffering": { + "$ref": "#/components/schemas/ProductOfferingRef" + }, + "lastUpdateDate": { + "type": "string", + "format": "date-time", + "description": "Latest date when the Product has been updated." + }, + "externalId": { + "type": "string", + "description": "This identifier is optionally provided during the Product ordering and stored for informative purpose in the seller inventory" + }, + "productRelationship": { + "type": "array", + "description": "A list of references to existing products that are related to the Product.", + "items": { + "$ref": "#/components/schemas/ProductRelationship" + } + }, + "id": { + "type": "string", + "description": "Unique identifier of the Product" + }, + "href": { + "type": "string", + "description": "Reference of the Product" + }, + "billingAccount": { + "$ref": "#/components/schemas/MEFBillingAccountRef" + }, + "productOrderItem": { + "type": "array", + "description": "The Product Order Item of the associated Product order that resulted in the creation of this Product.", + "items": { + "$ref": "#/components/schemas/MEFProductOrderItemRef" + } + }, + "startDate": { + "type": "string", + "format": "date-time", + "description": "The date from which the Product starts" + }, + "status": { + "$ref": "#/components/schemas/MEFProductStatusType" + } + }, + "required": ["id", "status"] + }, + "MEFProductStatusChange": { + "type": "object", + "description": "Holds the reached status, reasons and associated date the Product Order status changed, populated by the Seller.", + "properties": { + "changeReason": { + "type": "string", + "description": "The reason why the status changed." + }, + "changeDate": { + "type": "string", + "format": "date-time", + "description": "The date and time the status changed." + }, + "status": { + "$ref": "#/components/schemas/MEFProductStatusType" + } + }, + "required": ["changeDate", "status"] + }, + "ProductPrice": { + "type": "object", + "description": "An amount, usually of money, that represents the actual price paid by a Customer for a purchase, a rent or a lease of a Product. The price is valid for a defined period of time.", + "properties": { + "unitOfMeasure": { + "type": "string", + "description": "Unit of Measure if price depending on it (Gb, SMS volume, etc..)" + }, + "price": { + "$ref": "#/components/schemas/Price" + }, + "name": { + "type": "string", + "description": "A short descriptive name such as \"Subscription price\"." + }, + "priceType": { + "$ref": "#/components/schemas/MEFPriceType" + }, + "description": { + "type": "string", + "description": "A narrative that explains in detail the semantics of this Product price." + }, + "recurringChargePeriod": { + "$ref": "#/components/schemas/MEFChargePeriod" + } + }, + "required": ["price", "priceType"] + }, + "MEFProduct": { + "type": "object", + "description": "A product is realized as one or more service(s) and / or resource(s).", + "properties": { + "productSpecification": { + "$ref": "#/components/schemas/ProductSpecificationRef" + }, + "relatedSite": { + "type": "array", + "description": "Reference to a Site where the Product is provided.", + "items": { + "$ref": "#/components/schemas/RelatedGeographicSite" + } + }, + "productOffering": { + "$ref": "#/components/schemas/ProductOfferingRef" + }, + "lastUpdateDate": { + "type": "string", + "format": "date-time", + "description": "Latest date when the Product has been updated." + }, + "relatedContactInformation": { + "type": "array", + "description": "Party playing a role for this Product", + "items": { + "$ref": "#/components/schemas/RelatedContactInformation" + } + }, + "@type": { + "type": "string", + "description": "When sub-classing, this defines the sub-class entity name" + }, + "externalId": { + "type": "string", + "description": "Buyer identifier of the Product" + }, + "statusChange": { + "type": "array", + "description": "status change for the Product", + "items": { + "$ref": "#/components/schemas/MEFProductStatusChange" + } + }, + "billingAccount": { + "$ref": "#/components/schemas/MEFBillingAccountRef" + }, + "productOrderItem": { + "type": "array", + "description": "The Product Order Item of the associated Product order that resulted in the creation of this Product.", + "items": { + "$ref": "#/components/schemas/MEFProductOrderItemRef" + } + }, + "productTerm": { + "type": "array", + "description": "Term of the Product", + "items": { + "$ref": "#/components/schemas/MEFItemTerm" + } + }, + "terminationDate": { + "type": "string", + "format": "date-time", + "description": "Is the date when the product was terminated. MEF: Termination date (commercial) is when the Product has been terminated (when the disconnect in the Product Order has been processed)." + }, + "productConfiguration": { + "$ref": "#/components/schemas/MEFProductConfiguration" + }, + "productRelationship": { + "type": "array", + "description": "A list of references to existing Products that are related to the Product.", + "items": { + "$ref": "#/components/schemas/ProductRelationship" + } + }, + "id": { + "type": "string", + "description": "Unique identifier of the Product" + }, + "href": { + "type": "string", + "description": "Reference of the Product" + }, + "startDate": { + "type": "string", + "format": "date-time", + "description": "Is the date from which the Product starts. MEF: Start date is when the Product is active for the first time (when the install in the Product Order has been processed)." + }, + "productPrice": { + "type": "array", + "description": "A list of Prices associated with the Product", + "items": { + "$ref": "#/components/schemas/ProductPrice" + } + }, + "status": { + "$ref": "#/components/schemas/MEFProductStatusType" + } + }, + "required": ["id", "startDate", "status"] + }, + "CreateOrderActionCreateBase": { + "type": "object", + "title": "Payload for placing a product order to provision a service", + "required": [ + "companyId", + "productOfferingId", + "productSpecificationId", + "attributes" + ], + "properties": { + "companyId": { + "description": "Id of the Company placing the order, can be found by [**acquiring user details**](#tag/Manage_Company/I.-Prerequisite-Procedures/I.I.-Acquiring-user-details).", + "type": "string", + "format": "ObjectId" + }, + "customerReference": { + "description": "An external reference created by the customer for this order.", + "type": "string" + }, + "name": { + "description": "Name of the order.", + "type": "string" + }, + "orderAction": { + "default": "CREATE", + "description": "This field must be CREATE for provisioning a service." + }, + "productOfferingId": { + "description": "The id of the ProductOffering for the product to order.", + "type": "string", + "format": "uuid" + }, + "productSpecificationId": { + "description": "The id of the Product Specification this order was created from.", + "type": "string", + "format": "uuid" + } + } + }, + "OrderAddonBase": { + "type": "object", + "title": "Addon Order Fields", + "required": ["productOfferingId", "productSpecificationId"], + "properties": { + "productOfferingId": { + "description": "The id of the ProductOffering of the addon product.", + "type": "string", + "format": "uuid" + }, + "productSpecificationId": { + "description": "The Product Specification for the addon product.", + "type": "string", + "format": "uuid" + } + } + }, + "GenericAddonAttributes": { + "type": "object", + "required": ["attributes"], + "properties": { + "attributes": { + "description": "The values entered for each Product Attribute at the time of ordering. The attributes are expected to matches the target Product Specification.", + "type": "object" + } + } + }, + "GenericOrderAddon": { + "type": "object", + "properties": { + "addons": { + "description": "An array of objects containing the fields required to define the addon attributes included with the base product.", + "type": "array", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/OrderAddonBase" + }, + { + "$ref": "#/components/schemas/GenericAddonAttributes" + } + ] + } + } + } + }, + "GenericAttributes": { + "type": "object", + "properties": { + "attributes": { + "description": "The values entered for each Product Attribute at the time of ordering. The attributes are expected to matches the target Product Specification.", + "type": "object" + } + } + }, + "CreateGenericOrderActionCreate": { + "allOf": [ + { + "$ref": "#/components/schemas/CreateOrderActionCreateBase" + }, + { + "$ref": "#/components/schemas/GenericOrderAddon" + }, + { + "$ref": "#/components/schemas/GenericAttributes" + } + ] + }, + "Error-2": { + "description": "Standard Class used to describe API response error. Not intended to be used directly.\n", + "properties": { + "error": { + "properties": { + "statusCode": { + "type": "number" + }, + "name": { + "type": "string", + "enum": ["Error"] + }, + "message": { + "description": "Text that provides more details and corrective actions related to the error. This can be shown to a client user.", + "type": "string" + } + } + } + }, + "type": "object" + }, + "Error422-2": { + "allOf": [ + { + "$ref": "#/components/schemas/Error-2" + }, + { + "type": "object", + "properties": { + "error": { + "description": "Error details for unprocessable entity.", + "properties": { + "statusCode": { + "description": "Status code of error", + "enum": [422] + }, + "name": { + "description": "Type of message", + "enum": ["Error"] + }, + "message": { + "enum": [ + "Regulatory checks were denied.", + "Regulatory checks were denied and no regulatoryCheckReason was provided.", + "Regulatory checks were satisfied but a regulatoryCheckReason was provided." + ] + } + }, + "type": "object" + } + } + } + ], + "type": "object", + "properties": { + "error": { + "properties": { + "message": { + "description": "One of the following error messages:\n - Regulatory checks were denied.\n - Regulatory checks were denied and no regulatoryCheckReason was provided.\n - Regulatory checks were satisfied but a regulatoryCheckReason was provided." + } + } + } + } + } + }, + "examples": { + "DYNAMIC-private": { + "summary": "DYNAMIC IO-D with private ASN", + "value": { + "accessPortId": "xxxxxxxxxxxxxxxxxxxxxxxx", + "autoAssignBgpKey": true, + "defaultOriginate": true, + "duration": { + "quantity": 4, + "unit": "m" + }, + "enableIpv6": false, + "ipblock": 29, + "name": "DYNAMIC IoD with private ASN", + "paymentType": "invoice", + "privateAsn": true, + "privateAsnAutoAssign": true, + "rateLimit": 100, + "burstRate": 150, + "burstType": "95th Percentile", + "type": "DYNAMIC", + "vlanId": 3001 + } + }, + "DYNAMIC-public": { + "summary": "DYNAMIC IO-D with public ASN", + "value": { + "accessPortId": "xxxxxxxxxxxxxxxxxxxxxxxx", + "autoAssignBgpKey": true, + "defaultOriginate": true, + "duration": { + "quantity": 4, + "unit": "m" + }, + "enableIpv6": false, + "name": "DYNAMIC IoD with private ASN", + "paymentType": "invoice", + "privateAsn": false, + "asnId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "rateLimit": 100, + "burstRate": 150, + "burstType": "95th Percentile", + "type": "DYNAMIC", + "vlanId": 3001 + } + }, + "STATIC": { + "summary": "STATIC IO-D", + "value": { + "accessPortId": "xxxxxxxxxxxxxxxxxxxxxxxx", + "defaultOriginate": true, + "duration": { + "quantity": 4, + "unit": "m" + }, + "enableIpv6": false, + "ipblock": 29, + "name": "STATIC IoD", + "paymentType": "invoice", + "privateAsn": true, + "privateAsnAutoAssign": true, + "rateLimit": 100, + "burstRate": 150, + "burstType": "95th Percentile", + "type": "STATIC", + "vlanId": 3001 + } + } + } + }, + "security": [ + { + "api-key": [] + } + ], + "tags": [ + { + "name": "Getting Started", + "description": "Getting Started Section" + }, + { + "name": "IoD_Guideline", + "description": "A detailed guideline for provisioning Internet On-Demand (IO-D) Service with client system through Console Connect API Service.\n\n### Prerequisite\n\nThe following requirements must be met to perform the provided code samples.\n\n1. API Key - Contact the Console Connect Support team to request for an API Key Email: **[support@consoleconnect.com](mailto:support@consoleconnect.com)**\n2. Access Rights - User must have role: Network Admin/NETWORKCONTROL. You may verify your role **[here](https://app.consoleconnect.com/settings/members)**\n3. Acceptance of Agreement - API users must sign the Specific Terms for API Use.\n4. Your company has been verified on the Console Connect platform.\n\n# I. Prerequisite Procedures\nSimilar series of steps to perform to obtain the relevant data required for provisioning IO-D Service.\n\n## I.I. Acquiring user details\n\nThe user ID, company ID, and company username is obtained upon execution of API GET /api/auth/token. This provides information to the currently authenticated user\n\n```bash\ncurl -X GET https://api.consoleconnect.com/api/auth/token\\\n -H \"Authorization: Bearer \"\n``` \n\nIf the request was successful, it will respond with a JSON object similar to this:\n\n```json\n{\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"companies\": [\n {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Demo\",\n \"username\": \"demo\",\n // other properties...\n }\n ]\n // other properties...\n}\n```\n> **Note:**\n>\n> Take note of your **user id** (`id`), **company id** (`companies[0].id`), and **company username** (`companies[0].username`).\n\n\n## I.II. Listing ports for your company and Checking port's remaining capacity\nTo list all ports owned by your company execute the following curl command:\n\n```bash\ncurl -X GET https://api.consoleconnect.com/api/company/:companyUsername/ports?deleted=false`\\\n -H \"Authorization: Bearer \"\n```\n\n
\n\nIf the request was successful, it will respond with a detailed list of ports for the given company.\n\n```json\n{\n \"results\": [\n {\n \"dcpCompanyId\": null,\n \"name\": \"XXXX CONNECTIVITY\",\n \"speed\": {\n \"value\": 1000,\n \"name\": \"1000 Mbps\"\n },\n \"speedOverprovisioningFactor\": 1,\n \"singleService\": false,\n \"locationId\": null,\n \"dataCenterFacilityId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"popId\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"metroId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"status\": \"ACTIVE\",\n \"serviceStatus\": \"OPEN\",\n \"linkState\": \"UP\",\n \"linkStateUpSince\": null,\n \"linkStateSyncedAt\": \"2021-06-08T01:05:03.507Z\",\n \"type\": \"NNI\",\n \"isEdgePort\": false,\n \"edgePayload\": null,\n \"mediaType\": \"COPPER\",\n \"partner\": {\n \"type\": \"NONE\",\n \"connectionSpeeds\": []\n },\n \"ip\": {\n \"ipv4\": null,\n \"ipv6\": null\n },\n \"capabilities\": {\n \"model6Limit\": false,\n \"model6LimitNumber\": null,\n \"singleService\": false\n },\n \"activeChangedAt\": \"2021-06-08T01:05:33.694Z\",\n \"firstActiveAt\": \"2021-06-08T01:05:03.706Z\",\n \"updatedAt\": \"2023-01-24T02:08:29.005Z\",\n \"createdAt\": \"2021-06-08T01:04:59.457Z\",\n \"deleted\": false,\n \"deletedAt\": null,\n \"importedAt\": null,\n \"importer\": null,\n \"salesRecordId\": \"123456\",\n \"paymentType\": \"plan\",\n \"payg\": null,\n \"onboarded\": true,\n \"onboardedBy\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"onboardedAt\": \"2021-06-08T01:04:59.455Z\",\n \"onboardedStatus\": \"COMPLETE\",\n \"onboardedStatusDetail\": null,\n \"onboardedDeviceName\": \"usw01.pop01.hkg39\",\n \"onboardedInterfaceName\": \"GigabitEthernet0/0/11\",\n \"onboardedAllocatedBandwidth\": 10,\n \"billingId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"vlanRanges\": [\n {\n \"start\": 1000,\n \"end\": 1010\n }\n ],\n \"iciLink\": \"A\",\n \"reportingLabels\": [\n \"Meeting place port\"\n ],\n \"supportedServices\": [\n \"L2\"\n ],\n \"cosTransparency\": null,\n \"cosMapping\": {\n \"GOLD\": [\n \"\"\n ],\n \"SILVERPLUS\": [],\n \"SILVER\": [\n \"\"\n ],\n \"BRONZE\": []\n },\n \"externalId\": \"port-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"ticketLink\": null,\n \"crossConnectXcOwner\": null,\n \"crossConnectFullDemarc\": null,\n \"interconnectEnabled\": null,\n \"interconnectProvider\": null,\n \"interconnectOrderNumber\": null,\n \"interconnectCircuitId\": null,\n \"interconnectCompletedAt\": null,\n \"interconnectVlanRange\": null,\n \"interconnectNniPortName\": null,\n \"localLoopEnabled\": null,\n \"localLoopId\": null,\n \"localLoopCustomerId\": null,\n \"localLoopProviderName\": null,\n \"localLoopSalesRecordId\": null,\n \"localLoopBandwidth\": null,\n \"localLoopCompletedAt\": null,\n \"localLoopASideAddress\": null,\n \"localLoopASideXConnectId\": null,\n \"localLoopZSideAddress\": null,\n \"localLoopGsmpId\": null,\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"accessCircuit\": {\n \"crossConnectMediaType\": null\n },\n \"companyId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"capacity\": {\n \"total\": 1000,\n \"utilised\": 365,\n \"remaining\": 635\n },\n \"company\": {\n \"officeAddress\": null,\n \"system\": {\n \"welcomeMessage\": true\n },\n \"company\": {\n \"industry\": null,\n \"companySize\": null,\n \"dateFounded\": null,\n \"clientId\": null,\n \"first\": null,\n \"last\": null,\n \"address\": null,\n \"city\": null,\n \"state\": null,\n \"zip\": null,\n \"phone\": null,\n \"fax\": null,\n \"businessType\": \"Internet Exchange\",\n \"website\": \"sample.com\",\n \"registeredName\": \"updatedone2\",\n \"addresses\": [\n {\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": []\n },\n \"primary\": true,\n \"registered\": true,\n \"address\": \"2 Stuart Road\",\n \"city\": \"Tegucigalpa\",\n \"state\": \"hk\",\n \"zip\": \"4000\",\n \"country\": \"HN\",\n \"email\": null,\n \"phone\": \"01234567891\"\n }\n ],\n \"partnerType\": null,\n \"isIoTDemoCompany\": false\n },\n \"cloudProviderDetails\": {\n \"asn\": {\n \"range\": [\n 4200099007,\n 4200099009\n ]\n },\n \"cloudType\": \"vultr\",\n \"companyType\": \"B2B\",\n \"bgpAuthority\": \"PCCWGLOBAL\"\n },\n \"stats\": {\n \"members\": 186,\n \"interconnections\": 0,\n \"followers\": 0,\n \"following\": 0,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 14,\n \"events\": 0,\n \"posts\": 29\n },\n \"accountManagerEmail\": null,\n \"accountManagerId\": null,\n \"createdAt\": \"2019-08-09T05:32:18.613Z\",\n \"updatedAt\": \"2024-07-25T06:51:06.162Z\",\n \"username\": \"qe1\",\n \"deletedAt\": null,\n \"deleted\": false,\n \"verified\": true,\n \"tags\": [\n \"promoted\"\n ],\n \"status\": \"ACTIVE\",\n \"displayOrder\": 0,\n \"external\": [\n {\n \"id\": \"15\",\n \"type\": \"SDWAN\",\n \"status\": \"UNSYNCED\"\n }\n ],\n \"groups\": [],\n \"location\": null,\n \"summary\": \"

Testing adding new image12

\",\n \"headline\": \"wholesale\",\n \"background\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"avatarId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"SAMPLE NAME\",\n \"type\": \"COMPANY\",\n \"oldAvatarId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"verifiedIdentity\": true,\n \"portsActive\": 14,\n \"categories\": [\n \"Analytics\",\n \"AI\",\n \"IoT\"\n ],\n \"overviewImage\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"isCloudProvider\": true,\n \"signedCompanyRefId\": 4,\n \"signedCompanyVerified\": true,\n \"billingAccount\": \"115475\",\n \"businessRegistrationNumber\": \"123456\",\n \"selectiveQinQTunnelProvider\": [],\n \"companies\": [],\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"online\": false\n },\n \"dataCenterFacility\": {\n \"system\": {\n \"welcomeMessage\": null\n },\n \"company\": {\n \"privacy\": {\n \"network\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n },\n \"community\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n }\n },\n \"businessType\": null,\n \"partnerType\": null,\n \"companySize\": null,\n \"dateFounded\": null,\n \"registeredName\": null,\n \"businessRegistrationCertReference\": null,\n \"businessRegistrationCertUploadedAt\": null,\n \"businessRegistrationCertRejectedReason\": null,\n \"clientId\": null,\n \"first\": null,\n \"last\": null,\n \"address\": null,\n \"city\": null,\n \"state\": null,\n \"zip\": null,\n \"phone\": null,\n \"fax\": null,\n \"addresses\": [\n {\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": []\n },\n \"registered\": false,\n \"address\": \"\",\n \"city\": \"Hong Kong\",\n \"state\": \"\",\n \"zip\": \"zipcode\",\n \"country\": \"HK\",\n \"email\": null,\n \"phone\": null\n }\n ],\n \"regionalInternetRegistry\": [],\n \"businessRegistrationCertVerified\": \"UNVERIFIED\",\n \"website\": \"http://www.company.com1\",\n \"emailDomains\": [],\n \"industry\": \"\",\n \"businessDevelopmentManagerTypePreference\": \"UNSPECIFIED\",\n \"isIoTDemoCompany\": false\n },\n \"dataCenterFacility\": {\n \"airportCodes\": [],\n \"speeds\": [],\n \"metroId\": \"dataCenterFacility\",\n \"ready\": true,\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"nniReady\": true,\n \"brandId\": null,\n \"canBundleCrossConnect\": false\n },\n \"cloudProviderDetails\": {\n \"asn\": {\n \"range\": []\n },\n \"bgpAuthority\": \"PCCWGLOBAL\",\n \"companyType\": \"DCP\"\n },\n \"stats\": {\n \"members\": 0,\n \"interconnections\": 0,\n \"followers\": 5,\n \"following\": 0,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 0,\n \"events\": 0,\n \"posts\": 0\n },\n \"overviewImage\": null,\n \"businessRegistrationNumber\": null,\n \"signedCompanyRefId\": null,\n \"accountManagerEmail\": null,\n \"accountManagerId\": null,\n \"createdAt\": \"2018-02-20T04:49:09.604Z\",\n \"updatedAt\": \"2024-07-10T04:22:15.894Z\",\n \"username\": \"hkg05\",\n \"deletedAt\": null,\n \"deleted\": false,\n \"verified\": true,\n \"tags\": [\n \"offnet\",\n \"monthly-ports\"\n ],\n \"status\": \"ACTIVE\",\n \"displayOrder\": -299,\n \"groups\": [],\n \"location\": null,\n \"summary\": \"\",\n \"headline\": null,\n \"background\": null,\n \"avatarId\": null,\n \"name\": \"hkg39-Asia-HK-APAC\",\n \"type\": \"DATA_CENTER_FACILITY\",\n \"popIds\": [\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n ],\n \"costbookLocationId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"costbookLocation\": {\n \"name\": \"ASIA 1\",\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deletedAt\": null,\n \"createdAt\": \"2019-05-21T04:09:32.819Z\",\n \"updatedAt\": \"2019-11-05T01:31:28.426Z\",\n \"tags\": [\n \"generated\"\n ],\n \"gatewayIds\": [],\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ],\n \"regions\": [\n {\n \"name\": \"APAC\",\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deletedAt\": null,\n \"createdAt\": \"2017-12-18T00:26:28.610Z\",\n \"updatedAt\": \"2018-09-11T04:15:10.124Z\",\n \"deleted\": false,\n \"priceMultiplier\": 1,\n \"insightRegion\": \"Asia\"\n }\n ],\n \"gateways\": []\n },\n \"verifiedIdentity\": false,\n \"provider\": [\n \"PCCWGLOBAL\"\n ],\n \"destinationPortOnly\": false,\n \"categories\": [],\n \"nnis\": null,\n \"isCloudProvider\": false,\n \"l3CostbookLocationId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"bundleCrossConnectChargeId\": null,\n \"signedCompanyVerified\": false,\n \"selectiveQinQTunnelProvider\": [],\n \"companies\": [],\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"online\": false\n },\n \"connections\": [\n {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"SAMPLE NAME\",\n \"status\": \"ERROR\",\n \"speed\": 10,\n \"type\": \"LAYER2\",\n \"srcConfigTag\": null,\n \"typeFriendly\": \"IBM Direct Link\"\n },\n {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"SAMPLE NAME2\",\n \"status\": \"ERROR\",\n \"speed\": 10,\n \"type\": \"LAYER2\",\n \"srcConfigTag\": null,\n \"typeFriendly\": \"IBM Direct Link\"\n }\n ],\n \"metro\": {\n \"name\": \"Hong Kong\",\n \"code\": \"HKG\",\n \"country\": \"hk\",\n \"rir\": \"APNIC\",\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ],\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deletedAt\": null,\n \"createdAt\": \"2017-12-18T00:45:44.120Z\",\n \"updatedAt\": \"2024-02-25T05:02:47.267Z\",\n \"logo\": null,\n \"description\": \"a\",\n \"ready\": true,\n \"canCreateController\": false,\n \"deleted\": false,\n \"tags\": []\n }\n }\n ]\n}\n```\n\n
\n\n> **Note:**\n>\n> Take note of your **port ID** (Sample: `results[0].id`).\n\n> **Note:**\n>\n> Take note of your port's remaining capacity (Sample: `results[0].capacity.remaining`).\n\n## I.III. Validating if your port is IO-D enabled.\n\nTo obtain the details of your port capabilities execute the following curl command:\n\n```bash\ncurl -X GET https://api.consoleconnect.com/app-user/:companyId/ports/:portId/info`\\\n -H \"Authorization: Bearer \"\n```\n\nIf the request was successful, it will respond with a JSON object similar to this:\n\n```json\n{\n \"capabilities\": {\n \"giaStandardV1\": true,\n \"l2TypeA\": false,\n \"l3vpnTypeA\": true,\n \"qinq\": true\n }\n}\n```\n\n> **Note:**\n>\n> If `capabilities.giaStandardV1`'s value is `true`, then your port is IO-D enabled.\n\n# II. Provisioning IO-D with DYNAMIC routing type and Private ASN\nA detailed guideline for provisioning Internet On-Demand (IO-D) Service for a specified company (through company ID) configured with a private ASN and DYNAMIC routing type.\n\n## II.I. (Optional) Getting Private ASN Suggestion\n\nTo obtain suggested Private ASN execute the following curl command:\n\n```bash\ncurl -X GET https://api.consoleconnect.com/api/private-asn/suggestion`\\\n -H \"Authorization: Bearer \"\n```\nIf the request was successful, it will respond with a JSON object similar to this:\n\n```json\n{\n \"asn\": 4200000055\n}\n```\n\n> **Note:**\n>\n> Take note of the `asn` value.\n\n> **Note:**\n>\n> You may also want to look at **[Get Private ASN Range](Internet-On-Demand-(IO-D)#operation/get-private-asn-range)** to obtain an ASN range result.\n\n## II.II. Provisioning IO-D Service\n\nBelow is a sample curl command that that provisions an IO-D service for a specific company through **company ID** as path parameter, configured to auto assign a private ASN and with DYNAMIC routing type.\n\n```bash\ncurl -X POST https://api.consoleconnect.com/app-user/:companyId/gia-service`\\\n -H \"Authorization: Bearer \"\n --data-raw '{\n \"accessPortId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Sample IO-D Name\",\n \"rateLimit\": 10,\n \"type\": \"DYNAMIC\",\n \"privateAsn\": true,\n \"privateAsnAutoAssign\": true,\n \"ipBlock\": 28,\n \"enableIpv6\": false,\n \"autoAssignBgpKey\": true,\n \"defaultOriginate\": true,\n \"defaultOriginateIpv6\": true,\n \"duration\": {\n \"quantity\": 5,\n \"unit\": \"d\"\n },\n \"paymentType\": \"payg\",\n \"ipGeoCountry\": \"JP\",\n \"ipGeoCity\": \"\"\n }' \n```\n### Helpful Tips:\nIf `privateAsn` property value is `true` & `type` property value is `DYNAMIC`:\n\n - **Must** either set `privateAsnAutoAssign` property value to `true` **OR** set `privateAsnRequested` field providing your private ASN.\n\n > **Note** \n > \n > A helpful endpoint is available in providing you with a range of ASNs by executing **[Getting Private ASN Range](Getting-Started#section/ASNs/Getting-Private-ASNs-Range)**.\n - **Must** provide an `ipBlock`\n - If `enableIpv6` property value is `true`\n - **Must** supply an `ipv6Block` \n\n > **Note:**\n >\n > Currently the only valid value for `ipv6Block` is 48.\n - **Must** either set `autoAssignBgpKey` property value to `true` or supply a 6-24 characters long string value to `bgpKey`.\n - **Must** not set or include `asnId` in the request body.\n - Configuring burstRate involves a set of rules:\n - Committed data rate limit minimum is set at 10% of remaining port capacity.\n - Burstable bandwidth must exceed committed data rate, but not exceed remaining port capacity.\n - See **[Listing ports for your company and Checking port's remaining capacity](Provisioning-IO-D#section/I.-Prerequisite-Procedures/I.II.-Listing-ports-for-your-company-and-Checking-port's-remaining-capacity)** section to check your port capacity.\n - **IP prefix:** Ensure any IP prefix you will advertise via BGP are registered and signed under your ASN in your regional Internet Routing Registry.\n\n# III. Provisioning IO-D with DYNAMIC routing type and Public ASN\nA detailed guideline for provisioning Internet On-Demand (IO-D) Service for a specified company (through company ID) configured with a public ASN and DYNAMIC routing type.\n\n## III.I. Listing Verified ASN Linked your Company\n\nTo list all verified ASNs for your company simply execute the following curl command:\n\n```bash\ncurl -X GET https://api.consoleconnect.com/app-user/:companyId/asns?filter={\"where\":{\"status\":\"VERIFIED\",\"private\":false}}`\\\n -H \"Authorization: Bearer \"\n```\n
\n\nIf the request was successful, it will respond with a detailed list of ASNs.\n\n```json\n[\n {\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"companyId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"asn\": \"1234\",\n \"asSet\": \"AS-KEYCOM\",\n \"private\": false,\n \"skipPrefixSync\": false,\n \"status\": \"VERIFIED\",\n \"ipPrefixConfiguredInIPCV4\": [\n \"0.0.0.0/22\",\n \"0.0.0.0/23\",\n \"0.0.0.0/22\",\n \"0.0.0.0/22\",\n \"0.0.0.0/24\",\n \"0.0.0.0/19\"\n ],\n \"ipPrefixConfiguredInIPCV6\": [\n \"0000:0000::/29\",\n \"0000:0000::/29\"\n ],\n \"ipPrefixConfiguredInSLV4\": [\n \"0.0.0.0/22\",\n \"0.0.0.0/23\",\n \"0.0.0.0/22\",\n \"0.0.0.0/22\",\n \"0.0.0.0/24\",\n \"0.0.0.0/19\"\n ],\n \"ipPrefixConfiguredInSLV6\": [\n \"0000:0000::/29\",\n \"0000:0000::/29\"\n ],\n \"ipPrefixLastCheckedAt\": \"2022-08-01T04:00:24.950Z\",\n \"ipPrefixLastSLUpdateRequestAt\": null,\n \"ipPrefixLastSLUpdateSuccessAt\": \"2022-07-27T06:42:37.410Z\",\n \"ipPrefixLastErrorAt\": \"2024-08-02T00:27:07.910Z\",\n \"deallocatedAt\": null,\n \"ipPrefixLastErrorReason\": \"[object Object]\",\n \"company_id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deleted_at\": null,\n \"created_at\": \"2021-08-24T00:29:51.456Z\",\n \"updated_at\": \"2024-08-02T00:27:08.040Z\"\n }\n]\n```\n\n
\n\n> **Note:**\n>\n> To add new ASN, contact **[Console Connect Support Team (support@consoleconnect.com)](mailto:support@consoleconnect.com)** providing your ASN.\n\n## III.II. Provisioning IO-D Service\n\nBelow is a sample curl command that that provisions an IO-D service for a specific company through **company ID** as path parameter, configured with a public ASN and with DYNAMIC routing type.\n\n```bash\ncurl -X POST https://api.consoleconnect.com/app-user/:companyId/gia-service`\\\n -H \"Authorization: Bearer \"\n --data-raw '{\n \"accessPortId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Sample IO-D Name\",\n \"rateLimit\": 10,\n \"type\": \"DYNAMIC\",\n \"privateAsn\": false,\n \"asnId\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"ipBlock\": 28,\n \"enableIpv6\": false,\n \"autoAssignBgpKey\": true,\n \"defaultOriginate\": true,\n \"defaultOriginateIpv6\": true,\n \"duration\": {\n \"quantity\": 5,\n \"unit\": \"d\"\n },\n \"paymentType\": \"payg\",\n \"ipGeoCountry\": \"JP\",\n \"ipGeoCity\": \"\"\n }' \n```\n### Helpful Tips:\nIf `privateAsn` property value is `false` & `type` property value is `DYNAMIC`:\n\n - **Must** supply an **ASN ID** ( `asnId` )\n \n > **Note** \n >\n > To find your public ASN ID, execute **[Listing Verified ASN Linked to a Company](Provisioning-IO-D#section/I.-Prerequisite-Procedures/I.II.-Listing-ports-for-your-company-and-Checking-port's-remaining-capacity)** and take note of your **ASN ID** (`[0].id`).\n\n > **Note** \n >\n > To add a new ASN, contact **[Console Connect Support Team (support@consoleconnect.com)](mailto:support@consoleconnect.com)** providing your ASN.\n\n - **Must** either set `autoAssignBgpKey` property value to `true` or supply a 6-24 characters long string value to `bgpKey`.\n - **Must** not set or include `privateAsnRequested` in the request body.\n - **Must** not set or include `privateAsnAutoAssign` in the request body.\n - Configuring burstRate involves a set of rules:\n - Committed data rate limit minimum is set at 10% of remaining port capacity.\n - Burstable bandwidth must exceed committed data rate, but not exceed remaining port capacity.\n - See **[Listing ports for your company and Checking port's remaining capacity](Provisioning-IO-D#section/I.-Prerequisite-Procedures/I.II.-Listing-ports-for-your-company-and-Checking-port's-remaining-capacity)** section to check your port capacity.\n - **IP prefix:** Ensure any IP prefix you will advertise via BGP are registered and signed under your ASN in your regional Internet Routing Registry.\n\n# IV. Provisioning IO-D with STATIC routing type\nA detailed guideline for provisioning Internet On-Demand (IO-D) Service for a specified company (through company ID) configured with STATIC routing type.\n\n## IV.I. Provisioning IO-D Service\n\nBelow is a sample curl command that that provisions an IO-D service for a specific company through **company ID** as path parameter, configured to auto assign a private ASN and with STATIC routing type.\n\n```bash\ncurl -X POST https://api.consoleconnect.com/app-user/:companyId/gia-service`\\\n -H \"Authorization: Bearer \"\n --data-raw '{\n \"accessPortId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Sample IO-D Name\",\n \"rateLimit\": 10,\n \"type\": \"STATIC\",\n \"privateAsn\": false,\n \"privateAsnAutoAssign\": true,\n \"ipBlock\": 28,\n \"enableIpv6\": false,\n \"defaultOriginate\": true,\n \"defaultOriginateIpv6\": true,\n \"duration\": {\n \"quantity\": 5,\n \"unit\": \"d\"\n },\n \"paymentType\": \"payg\",\n \"ipGeoCountry\": \"JP\",\n \"ipGeoCity\": \"\"\n }' \n```\n### Helpful Tips:\n\nIf `privateAsn` property value is `false` & `type` property value is `DYNAMIC`:\n\n - **Must** set `privateAsn` property value to `true`.\n - **Must** set `privateAsnAutoAssign` property value to true\n - **Must** provide an `ipBlock`\n - If `enableIpv6` property value is `true`\n - **Must** supply an `ipv6Block` \n\n > **Note:**\n >\n > Currently the only valid value for `ipv6Block` is 48.\n - **Must** not set or include `asnId` in the request body.\n - **Must** not set or include `privateAsnRequested` in the request body.\n - **Must** not set or include `bgpKey ` in the request body.\n - **Must** not set or include `autoAssignBgpKey` in the request body.\n - Configuring burstRate involves a set of rules:\n - Committed data rate limit minimum is set at 10% of remaining port capacity.\n - Burstable bandwidth must exceed committed data rate, but not exceed remaining port capacity.\n - See **[Listing ports for your company and Checking port's remaining capacity](Provisioning-IO-D#section/I.-Prerequisite-Procedures/I.II.-Listing-ports-for-your-company-and-Checking-port's-remaining-capacity)** section to check your port capacity.\n - **IP prefix:** Ensure any IP prefix you will advertise via BGP is registered and signed under your ASN in your regional Internet Routing Registry.", + "x-displayName": "Provisioning IO-D" + }, + { + "name": "Pricing_Ports_Connection", + "description": "This section provides a comprehensive guide for integrating Console Connect Pricing - Ports and Layer 2 Connection API which accepts an array of `port` configuration or an array of `connection` configuration.\n\n### Prerequisite\n\nThe following requirements must be met to perform the provided code samples.\n\n1. API Key - Contact the Console Connect Support team to request for an API Key Email: **[support@consoleconnect.com](mailto:support@consoleconnect.com)**\n2. Access Rights - User must have role: Network Admin/NETWORKCONTROL. You may verify your role **[here](https://app.consoleconnect.com/settings/members)**\n3. Acceptance of Agreement - API users must sign the Specific Terms for API Use.\n4. Your company has been verified on the Console Connect platform.\n\n# I. Prerequisite Procedure\n\n## I.I Searching Data Center Facilities (DCF)\n\nBelow is an example execution of API to filter and return a list Data Center Facilities with details, it accepts **criteria**(`optional`), **page**, and **page size** query parameters.\n\n```bash\ncurl -X GET \"https://api.consoleconnect.com/v2/data-center-facility/search?criteria={}&page=1&pageSize=10\"`\\\n -H \"Authorization: Bearer \"\n```\n\n
\n\nIf the request was successful, it will respond with a detailed list of DCFs.\n\n```json\n[{\n \"company\": {\n \"privacy\": {\n \"network\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n },\n \"community\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n }\n },\n \"addresses\": [\n {\n \"registered\": false,\n \"address\": \"\",\n \"city\": \"Hong Kong\",\n \"state\": \"\",\n \"zip\": \"zipcode\",\n \"country\": \"HK\",\n \"email\": null,\n \"phone\": null,\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": []\n }\n }\n ],\n \"parentIds\": [],\n \"regionalInternetRegistry\": [],\n \"businessRegistrationCertVerified\": \"UNVERIFIED\",\n \"website\": \"http://www.company.com1\",\n \"emailDomains\": [],\n \"industry\": \"\",\n \"businessDevelopmentManagerTypePreference\": \"UNSPECIFIED\",\n \"isIoTDemoCompany\": false\n },\n \"username\": \"DCF_COMPANY_USERNAME\",\n \"name\": \"SAMPLE-DCF-NAME\",\n \"tags\": [\n \"offnet\",\n \"monthly-ports\"\n ],\n \"dataCenterFacility\": {\n \"airportCodes\": [],\n \"speeds\": [],\n \"metroId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"ready\": true,\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"nniReady\": true,\n \"brandId\": null,\n \"canBundleCrossConnect\": false\n },\n \"stats\": {\n \"members\": 0,\n \"interconnections\": 0,\n \"followers\": 5,\n \"following\": 0,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 0,\n \"events\": 0,\n \"posts\": 0\n },\n \"provider\": [\n \"PCCWGLOBAL\"\n ],\n \"selectiveQinQTunnelProvider\": [],\n \"externalId\": null,\n \"destinationPortOnly\": false,\n \"verified\": true,\n \"nnis\": null,\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"bundleCrossConnectChargeId\": null,\n \"deletedAt\": null,\n \"createdAt\": \"2018-02-20T04:49:09.604Z\",\n \"updatedAt\": \"2024-07-10T04:22:15.894Z\",\n \"products\": [\n {\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"companyId\": null,\n \"dataCenterFacilityId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"slug\": null,\n \"status\": \"PUBLISHED\",\n \"transactionType\": \"ENQUIRE\",\n \"productType\": \"Data centers\",\n \"promoted\": true,\n \"name\": \"Sample Product Name\",\n \"headline\": \"Sample Headline\",\n \"description\": \"Demo description\",\n \"logo\": null,\n \"overviewImage\": null,\n \"background\": null,\n \"categories\": [\n \"Data Center\"\n ],\n \"tags\": null,\n \"promoTitle\": \"Sample Title\",\n \"promoHeadline\": \"Sample Headline\",\n \"callToActionLabel\": \"Order rack\",\n \"callToActionLink\": null,\n \"vendorUrl\": null,\n \"hubspotFormId\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"productFamilyId\": null,\n \"isAddon\": false,\n \"productCode\": null,\n \"created_at\": \"2021-02-16T04:18:06.026Z\",\n \"updated_at\": \"2021-05-19T06:43:38.193Z\"\n }\n ],\n \"isFollowing\": false\n}]\n```\n\n
\n\n> **Info**\n>\n> Take note of the **DCF ID** (`[0].id`).\n\n# II. Calculate Port Pricing\n\nThis section is a detailed guideline for calculating Ports with different payload configuration.\n\n## II.I. Single Port\n\nThis sample calculates a single port with 20 Mbps bandwidth for 1 month duration.\n\n```bash\ncurl -X POST https://api.consoleconnect.com/api/pricing/calculate`\\\n -H \"Authorization: Bearer \"\n --data-raw '{\n \"ports\": [\n {\n \"dcf: \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"speed\": 1000,\n \"duration\": \"y\"\n }\n ]\n }' \n```\n\n
\n\nIf the request was successful, it will respond with a list/array of ports or connection pricing details:\n\n```json\n{\n \"results\": [\n {\n \"type\": \"PORT\",\n \"entity\": {\n \"dcf\": {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Company A\",\n \"popId\": null,\n \"regionIds\": null,\n \"metroIds\": null,\n \"tags\": null\n },\n \"speed\": 1000,\n \"discountId\": \"\",\n \"durationUnit\": \"y\"\n },\n \"price\": 300,\n \"preAuthAmount\": 300,\n \"amountSaved\": null,\n \"amountSavedTotal\": null,\n \"basicTotalAmount\": null,\n \"basicMonthlyAmount\": null,\n \"priceCalculatorAttributes\": {\n \"discountIds\": [],\n \"discounts\": []\n }\n }\n ]\n}\n```\n\n
\n\n## II.II. Single Port with Cross Connect\n\nThis sample calculates a single port with 1000 Mbps bandwidth for 1 month duration and with a cross-connect add-on.\n\n```bash\ncurl -X POST https://api.consoleconnect.com/api/pricing/calculate`\\\n -H \"Authorization: Bearer \"\n --data-raw '{\n \"ports\": [\n {\n \"dcf\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"speed\": 1000,\n \"durationUnit\": \"y\"\n }\n ],\n \"includeCrossConnect\": true\n }' \n```\n\n
\n\nIf the request was successful, it will respond with a list/array of ports or connection pricing details:\n\n```json\n{\n \"results\": [\n {\n \"type\": \"PORT\",\n \"entity\": {\n \"dcf\": {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Company A\",\n \"popId\": null,\n \"regionIds\": null,\n \"metroIds\": null,\n \"tags\": null\n },\n \"speed\": 1000,\n \"discountId\": \"\",\n \"durationUnit\": \"y\"\n },\n \"price\": 300,\n \"preAuthAmount\": 300,\n \"amountSaved\": null,\n \"amountSavedTotal\": null,\n \"basicTotalAmount\": null,\n \"basicMonthlyAmount\": null,\n \"priceCalculatorAttributes\": {\n \"discountIds\": [],\n \"discounts\": []\n },\n \"crossConnectAmount\": 65\n }\n ]\n}\n```\n\n
\n\n## II.III. Multiple Ports\n\nThis sample calculates a multiple ports with different bandwidth configuration and duration\n\n```bash\ncurl -X POST https://api.consoleconnect.com/api/pricing/calculate`\\\n -H \"Authorization: Bearer \"\n --data-raw '{\n \"ports\": [\n {\n \"dcf\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"speed\": 10000,\n \"durationUnit\": \"y\"\n },\n {\n \"dcf\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"speed\": 1000,\n \"durationUnit\": \"m\"\n }\n ]\n }' \n```\n\n
\n\nIf the request was successful, it will respond with a list/array of ports or connection pricing details:\n\n```json\n{\n \"results\": [\n {\n \"type\": \"PORT\",\n \"entity\": {\n \"dcf\": {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Company A\",\n \"popId\": null,\n \"regionIds\": null,\n \"metroIds\": null,\n \"tags\": null\n },\n \"speed\": 10000,\n \"discountId\": \"\",\n \"durationUnit\": \"y\"\n },\n \"price\": 400,\n \"preAuthAmount\": 400,\n \"amountSaved\": null,\n \"amountSavedTotal\": null,\n \"basicTotalAmount\": null,\n \"basicMonthlyAmount\": null,\n \"priceCalculatorAttributes\": {\n \"discountIds\": [],\n \"discounts\": []\n }\n },\n {\n \"type\": \"PORT\",\n \"entity\": {\n \"dcf\": {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Company B\",\n \"popId\": null,\n \"regionIds\": null,\n \"metroIds\": null,\n \"tags\": null\n },\n \"speed\": 1000,\n \"discountId\": \"\",\n \"durationUnit\": \"m\"\n },\n \"price\": 450,\n \"preAuthAmount\": 450,\n \"amountSaved\": null,\n \"amountSavedTotal\": null,\n \"basicTotalAmount\": null,\n \"basicMonthlyAmount\": null\n }\n ]\n}\n```\n\n
\n\n# III. Calculate L2 Connection Pricing\n\nThis section is a detailed guideline for calculating Ports with different payload configuration.\n\n## III.I. Single Connection\n\nThis sample calculates a single connection with 20 Mbps bandwidth for 1 month duration.\n\n```bash\ncurl -X POST https://api.consoleconnect.com/api/pricing/calculate`\\\n -H \"Authorization: Bearer \"\n --data-raw '{\n \"connections\": [\n {\n \"bandwidth\": 20,\n \"classOfService\": \"SILVER\",\n \"duration\": {\n \"value\": 1,\n \"unit\": \"m\"\n },\n \"srcDcf\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"destDcf\": \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n }\n ]\n }' \n```\n\n
\n\nIf the request was successful, it will respond with a list/array of ports or connection pricing details:\n\n```json\n{\n \"results\": [\n {\n \"type\": \"CONNECTION\",\n \"entity\": {\n \"srcDcf\": {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Company A\",\n \"popId\": null,\n \"regionIds\": null,\n \"metroIds\": null,\n \"tags\": null\n },\n \"destDcf\": {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Company B\",\n \"popId\": null,\n \"regionIds\": null,\n \"metroIds\": null,\n \"tags\": null\n },\n \"duration\": {\n \"from\": null,\n \"to\": null,\n \"unit\": \"m\",\n \"value\": 1\n },\n \"bandwidth\": 20,\n \"classOfService\": \"SILVER\",\n \"discountId\": \"\"\n },\n \"price\": 80,\n \"preAuthAmount\": 80,\n \"amountSaved\": null,\n \"amountSavedTotal\": null,\n \"basicTotalAmount\": 80,\n \"basicMonthlyAmount\": 80,\n \"formula\": \"(bandwidthCost*multiplier)*duration/(1-margin)+portFee\",\n \"factors\": [\n {\n \"name\": \"margin\",\n \"number\": 0,\n \"ref\": null\n },\n {\n \"name\": \"portFee\",\n \"number\": 0,\n \"ref\": null\n },\n {\n \"name\": \"nniFee\",\n \"number\": 0,\n \"ref\": null\n },\n {\n \"name\": \"bandwidthCost\",\n \"number\": 80,\n \"ref\": {\n \"from\": {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"EUROPE/UK\",\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ]\n },\n \"to\": {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"EUROPE/UK\",\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ]\n },\n \"price\": {\n \"price\": 1.75,\n \"bandwidth\": {\n \"from\": 1,\n \"to\": 100\n },\n \"cos\": \"SILVER\"\n }\n }\n },\n {\n \"name\": \"multiplier\",\n \"number\": 1,\n \"ref\": null\n },\n {\n \"name\": \"duration\",\n \"number\": 1,\n \"ref\": null\n }\n ],\n \"priceCalculatorAttributes\": {\n \"discountIds\": [],\n \"discounts\": []\n }\n }\n ]\n}\n```\n\n
\n\n## III.I. Multiple Connection\n\nThis sample calculates multiple connections with different configuration.\n\n```bash\ncurl -X POST https://api.consoleconnect.com/api/pricing/calculate`\\\n -H \"Authorization: Bearer \"\n --data-raw '{\n \"connections\": [\n \n \"bandwidth\": 20,\n \"classOfService\": \"SILVER\",\n \"duration\": {\n \"value\": 1,\n \"unit\": \"w\"\n },\n \"srcDcf\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"destDcf\": \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n },\n {\n \"bandwidth\": 20,\n \"classOfService\": \"SILVER\",\n \"duration\": {\n \"value\": 1,\n \"unit\": \"m\"\n },\n \"srcDcf\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"destDcf\": \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n }\n ]\n }'\n ```\n\n
\n\nIf the request was successful, it will respond with a list/array of ports or connection pricing details:\n\n```json\n{\n \"results\": [\n {\n \"type\": \"CONNECTION\",\n \"entity\": {\n \"srcDcf\": {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Company A\",\n \"popId\": null,\n \"regionIds\": null,\n \"metroIds\": null,\n \"tags\": null\n },\n \"destDcf\": {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Company B\",\n \"popId\": null,\n \"regionIds\": null,\n \"metroIds\": null,\n \"tags\": null\n },\n \"duration\": {\n \"from\": null,\n \"to\": null,\n \"unit\": \"w\",\n \"value\": 1\n },\n \"bandwidth\": 20,\n \"classOfService\": \"SILVER\",\n \"discountId\": \"\"\n },\n \"price\": 28.8,\n \"preAuthAmount\": 28.8,\n \"amountSaved\": null,\n \"amountSavedTotal\": null,\n \"basicTotalAmount\": 28.8,\n \"basicMonthlyAmount\": 28.8,\n \"formula\": \"(bandwidthCost*multiplier)*duration/(1-margin)+portFee\",\n \"factors\": [\n {\n \"name\": \"margin\",\n \"number\": 0,\n \"ref\": null\n },\n {\n \"name\": \"portFee\",\n \"number\": 0,\n \"ref\": null\n },\n {\n \"name\": \"nniFee\",\n \"number\": 0,\n \"ref\": null\n },\n {\n \"name\": \"bandwidthCost\",\n \"number\": 80,\n \"ref\": {\n \"from\": {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"EUROPE/UK\",\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ]\n },\n \"to\": {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"EUROPE/UK\",\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ]\n },\n \"price\": {\n \"price\": 1.75,\n \"bandwidth\": {\n \"from\": 1,\n \"to\": 100\n },\n \"cos\": \"SILVER\"\n }\n }\n },\n {\n \"name\": \"multiplier\",\n \"number\": 0.36,\n \"ref\": null\n },\n {\n \"name\": \"duration\",\n \"number\": 1,\n \"ref\": null\n }\n ],\n \"priceCalculatorAttributes\": {\n \"discountIds\": [],\n \"discounts\": []\n }\n },\n {\n \"type\": \"CONNECTION\",\n \"entity\": {\n \"srcDcf\": {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Company A\",\n \"popId\": null,\n \"regionIds\": null,\n \"metroIds\": null,\n \"tags\": null\n },\n \"destDcf\": {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Company B\",\n \"popId\": null,\n \"regionIds\": null,\n \"metroIds\": null,\n \"tags\": null\n },\n \"duration\": {\n \"from\": null,\n \"to\": null,\n \"unit\": \"m\",\n \"value\": 1\n },\n \"bandwidth\": 20,\n \"classOfService\": \"SILVER\",\n \"discountId\": \"\"\n },\n \"price\": 80,\n \"preAuthAmount\": 80,\n \"amountSaved\": null,\n \"amountSavedTotal\": null,\n \"basicTotalAmount\": 80,\n \"basicMonthlyAmount\": 80,\n \"formula\": \"(bandwidthCost*multiplier)*duration/(1-margin)+portFee\",\n \"factors\": [\n {\n \"name\": \"margin\",\n \"number\": 0,\n \"ref\": null\n },\n {\n \"name\": \"portFee\",\n \"number\": 0,\n \"ref\": null\n },\n {\n \"name\": \"nniFee\",\n \"number\": 0,\n \"ref\": null\n },\n {\n \"name\": \"bandwidthCost\",\n \"number\": 80,\n \"ref\": {\n \"from\": {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"EUROPE/UK\",\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ]\n },\n \"to\": {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"EUROPE/UK\",\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ]\n },\n \"price\": {\n \"price\": 1.75,\n \"bandwidth\": {\n \"from\": 1,\n \"to\": 100\n },\n \"cos\": \"SILVER\"\n }\n }\n },\n {\n \"name\": \"multiplier\",\n \"number\": 1,\n \"ref\": null\n },\n {\n \"name\": \"duration\",\n \"number\": 1,\n \"ref\": null\n }\n ]\n }\n ]\n}\n```\n\n
\n", + "x-displayName": "Pricing - Ports and connection" + }, + { + "name": "Pricing_IoD", + "description": "This section provides a comprehensive guide for integrating Console Connect IO-D - Pricing API, it provides a detailed guideline on usage, response schema definition, and API behavior.\n\n### Prerequisite\n\nThe following requirements must be met to perform the provided code samples.\n\n1. API Key - Contact the Console Connect Support team to request for an API Key Email: **[support@consoleconnect.com](mailto:support@consoleconnect.com)**\n2. Access Rights - User must have role: Network Admin/NETWORKCONTROL. You may verify your role **[here](https://app.consoleconnect.com/settings/members)**\n3. Acceptance of Agreement - API users must sign the Specific Terms for API Use.\n4. Your company has been verified on the Console Connect platform.\n\n# I. Internet On-Demand Pricing - Company and Port\n\nThis service calculates IO-D service charge rate by company & ports, it accepts company ID (`companyId`), port ID (`portId`), bandwidth (`bandwidth`), duration value (`durationValue`), duration unit (`durationUnit`) and an optional discount code (`discountCode`) as query parameters and responds with calculation details based on the payload configuration provided.\n\n## I.I. Acquiring user details\n\nThe user ID, company ID, and company username is obtained upon execution of API GET /api/auth/token. This provides information to the currently authenticated user\n\n```bash\ncurl -X GET https://api.consoleconnect.com/api/auth/token\\\n -H \"Authorization: Bearer \"\n``` \n\nIf the request was successful, it will respond with a JSON object similar to this:\n\n```json\n{\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"companies\": [\n {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Demo\",\n \"username\": \"demo\",\n // other properties...\n }\n ]\n // other properties...\n}\n```\n> **Note:**\n>\n> Take note of your **company id** (`companies[0].id`), and **company username** (`companies[0].username`).\n\n\n## I.II. Listing ports for your company\n\nTo list all ports owned by your company execute the following curl command:\n\n```bash\ncurl -X GET https://api.consoleconnect.com/api/company/:companyUsername/ports?deleted=false`\\\n -H \"Authorization: Bearer \"\n```\n\n
\n\nIf the request was successful, it will respond with a detailed list of ports for the given company.\n\n```json\n{\n \"results\": [\n {\n \"dcpCompanyId\": null,\n \"name\": \"XXXX CONNECTIVITY\",\n \"speed\": {\n \"value\": 1000,\n \"name\": \"1000 Mbps\"\n },\n \"speedOverprovisioningFactor\": 1,\n \"singleService\": false,\n \"locationId\": null,\n \"dataCenterFacilityId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"popId\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"metroId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"status\": \"ACTIVE\",\n \"serviceStatus\": \"OPEN\",\n \"linkState\": \"UP\",\n \"linkStateUpSince\": null,\n \"linkStateSyncedAt\": \"2021-06-08T01:05:03.507Z\",\n \"type\": \"NNI\",\n \"isEdgePort\": false,\n \"edgePayload\": null,\n \"mediaType\": \"COPPER\",\n \"partner\": {\n \"type\": \"NONE\",\n \"connectionSpeeds\": []\n },\n \"ip\": {\n \"ipv4\": null,\n \"ipv6\": null\n },\n \"capabilities\": {\n \"model6Limit\": false,\n \"model6LimitNumber\": null,\n \"singleService\": false\n },\n \"activeChangedAt\": \"2021-06-08T01:05:33.694Z\",\n \"firstActiveAt\": \"2021-06-08T01:05:03.706Z\",\n \"updatedAt\": \"2023-01-24T02:08:29.005Z\",\n \"createdAt\": \"2021-06-08T01:04:59.457Z\",\n \"deleted\": false,\n \"deletedAt\": null,\n \"importedAt\": null,\n \"importer\": null,\n \"salesRecordId\": \"123456\",\n \"paymentType\": \"plan\",\n \"payg\": null,\n \"onboarded\": true,\n \"onboardedBy\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"onboardedAt\": \"2021-06-08T01:04:59.455Z\",\n \"onboardedStatus\": \"COMPLETE\",\n \"onboardedStatusDetail\": null,\n \"onboardedDeviceName\": \"usw01.pop01.hkg39\",\n \"onboardedInterfaceName\": \"GigabitEthernet0/0/11\",\n \"onboardedAllocatedBandwidth\": 10,\n \"billingId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"vlanRanges\": [\n {\n \"start\": 1000,\n \"end\": 1010\n }\n ],\n \"iciLink\": \"A\",\n \"reportingLabels\": [\n \"Meeting place port\"\n ],\n \"supportedServices\": [\n \"L2\"\n ],\n \"cosTransparency\": null,\n \"cosMapping\": {\n \"GOLD\": [\n \"\"\n ],\n \"SILVERPLUS\": [],\n \"SILVER\": [\n \"\"\n ],\n \"BRONZE\": []\n },\n \"externalId\": \"port-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"ticketLink\": null,\n \"crossConnectXcOwner\": null,\n \"crossConnectFullDemarc\": null,\n \"interconnectEnabled\": null,\n \"interconnectProvider\": null,\n \"interconnectOrderNumber\": null,\n \"interconnectCircuitId\": null,\n \"interconnectCompletedAt\": null,\n \"interconnectVlanRange\": null,\n \"interconnectNniPortName\": null,\n \"localLoopEnabled\": null,\n \"localLoopId\": null,\n \"localLoopCustomerId\": null,\n \"localLoopProviderName\": null,\n \"localLoopSalesRecordId\": null,\n \"localLoopBandwidth\": null,\n \"localLoopCompletedAt\": null,\n \"localLoopASideAddress\": null,\n \"localLoopASideXConnectId\": null,\n \"localLoopZSideAddress\": null,\n \"localLoopGsmpId\": null,\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"accessCircuit\": {\n \"crossConnectMediaType\": null\n },\n \"companyId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"capacity\": {\n \"total\": 1000,\n \"utilised\": 365,\n \"remaining\": 635\n },\n \"company\": {\n \"officeAddress\": null,\n \"system\": {\n \"welcomeMessage\": true\n },\n \"company\": {\n \"industry\": null,\n \"companySize\": null,\n \"dateFounded\": null,\n \"clientId\": null,\n \"first\": null,\n \"last\": null,\n \"address\": null,\n \"city\": null,\n \"state\": null,\n \"zip\": null,\n \"phone\": null,\n \"fax\": null,\n \"businessType\": \"Internet Exchange\",\n \"website\": \"sample.com\",\n \"registeredName\": \"updatedone2\",\n \"addresses\": [\n {\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": []\n },\n \"primary\": true,\n \"registered\": true,\n \"address\": \"2 Stuart Road\",\n \"city\": \"Tegucigalpa\",\n \"state\": \"hk\",\n \"zip\": \"4000\",\n \"country\": \"HN\",\n \"email\": null,\n \"phone\": \"01234567891\"\n }\n ],\n \"partnerType\": null,\n \"isIoTDemoCompany\": false\n },\n \"cloudProviderDetails\": {\n \"asn\": {\n \"range\": [\n 4200099007,\n 4200099009\n ]\n },\n \"cloudType\": \"vultr\",\n \"companyType\": \"B2B\",\n \"bgpAuthority\": \"PCCWGLOBAL\"\n },\n \"stats\": {\n \"members\": 186,\n \"interconnections\": 0,\n \"followers\": 0,\n \"following\": 0,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 14,\n \"events\": 0,\n \"posts\": 29\n },\n \"accountManagerEmail\": null,\n \"accountManagerId\": null,\n \"createdAt\": \"2019-08-09T05:32:18.613Z\",\n \"updatedAt\": \"2024-07-25T06:51:06.162Z\",\n \"username\": \"qe1\",\n \"deletedAt\": null,\n \"deleted\": false,\n \"verified\": true,\n \"tags\": [\n \"promoted\"\n ],\n \"status\": \"ACTIVE\",\n \"displayOrder\": 0,\n \"external\": [\n {\n \"id\": \"15\",\n \"type\": \"SDWAN\",\n \"status\": \"UNSYNCED\"\n }\n ],\n \"groups\": [],\n \"location\": null,\n \"summary\": \"

Testing adding new image12

\",\n \"headline\": \"wholesale\",\n \"background\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"avatarId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"SAMPLE NAME\",\n \"type\": \"COMPANY\",\n \"oldAvatarId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"verifiedIdentity\": true,\n \"portsActive\": 14,\n \"categories\": [\n \"Analytics\",\n \"AI\",\n \"IoT\"\n ],\n \"overviewImage\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"isCloudProvider\": true,\n \"signedCompanyRefId\": 4,\n \"signedCompanyVerified\": true,\n \"billingAccount\": \"115475\",\n \"businessRegistrationNumber\": \"123456\",\n \"selectiveQinQTunnelProvider\": [],\n \"companies\": [],\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"online\": false\n },\n \"dataCenterFacility\": {\n \"system\": {\n \"welcomeMessage\": null\n },\n \"company\": {\n \"privacy\": {\n \"network\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n },\n \"community\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n }\n },\n \"businessType\": null,\n \"partnerType\": null,\n \"companySize\": null,\n \"dateFounded\": null,\n \"registeredName\": null,\n \"businessRegistrationCertReference\": null,\n \"businessRegistrationCertUploadedAt\": null,\n \"businessRegistrationCertRejectedReason\": null,\n \"clientId\": null,\n \"first\": null,\n \"last\": null,\n \"address\": null,\n \"city\": null,\n \"state\": null,\n \"zip\": null,\n \"phone\": null,\n \"fax\": null,\n \"addresses\": [\n {\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": []\n },\n \"registered\": false,\n \"address\": \"\",\n \"city\": \"Hong Kong\",\n \"state\": \"\",\n \"zip\": \"zipcode\",\n \"country\": \"HK\",\n \"email\": null,\n \"phone\": null\n }\n ],\n \"regionalInternetRegistry\": [],\n \"businessRegistrationCertVerified\": \"UNVERIFIED\",\n \"website\": \"http://www.company.com1\",\n \"emailDomains\": [],\n \"industry\": \"\",\n \"businessDevelopmentManagerTypePreference\": \"UNSPECIFIED\",\n \"isIoTDemoCompany\": false\n },\n \"dataCenterFacility\": {\n \"airportCodes\": [],\n \"speeds\": [],\n \"metroId\": \"dataCenterFacility\",\n \"ready\": true,\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"nniReady\": true,\n \"brandId\": null,\n \"canBundleCrossConnect\": false\n },\n \"cloudProviderDetails\": {\n \"asn\": {\n \"range\": []\n },\n \"bgpAuthority\": \"PCCWGLOBAL\",\n \"companyType\": \"DCP\"\n },\n \"stats\": {\n \"members\": 0,\n \"interconnections\": 0,\n \"followers\": 5,\n \"following\": 0,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 0,\n \"events\": 0,\n \"posts\": 0\n },\n \"overviewImage\": null,\n \"businessRegistrationNumber\": null,\n \"signedCompanyRefId\": null,\n \"accountManagerEmail\": null,\n \"accountManagerId\": null,\n \"createdAt\": \"2018-02-20T04:49:09.604Z\",\n \"updatedAt\": \"2024-07-10T04:22:15.894Z\",\n \"username\": \"hkg05\",\n \"deletedAt\": null,\n \"deleted\": false,\n \"verified\": true,\n \"tags\": [\n \"offnet\",\n \"monthly-ports\"\n ],\n \"status\": \"ACTIVE\",\n \"displayOrder\": -299,\n \"groups\": [],\n \"location\": null,\n \"summary\": \"\",\n \"headline\": null,\n \"background\": null,\n \"avatarId\": null,\n \"name\": \"hkg39-Asia-HK-APAC\",\n \"type\": \"DATA_CENTER_FACILITY\",\n \"popIds\": [\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n ],\n \"costbookLocationId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"costbookLocation\": {\n \"name\": \"ASIA 1\",\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deletedAt\": null,\n \"createdAt\": \"2019-05-21T04:09:32.819Z\",\n \"updatedAt\": \"2019-11-05T01:31:28.426Z\",\n \"tags\": [\n \"generated\"\n ],\n \"gatewayIds\": [],\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ],\n \"regions\": [\n {\n \"name\": \"APAC\",\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deletedAt\": null,\n \"createdAt\": \"2017-12-18T00:26:28.610Z\",\n \"updatedAt\": \"2018-09-11T04:15:10.124Z\",\n \"deleted\": false,\n \"priceMultiplier\": 1,\n \"insightRegion\": \"Asia\"\n }\n ],\n \"gateways\": []\n },\n \"verifiedIdentity\": false,\n \"provider\": [\n \"PCCWGLOBAL\"\n ],\n \"destinationPortOnly\": false,\n \"categories\": [],\n \"nnis\": null,\n \"isCloudProvider\": false,\n \"l3CostbookLocationId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"bundleCrossConnectChargeId\": null,\n \"signedCompanyVerified\": false,\n \"selectiveQinQTunnelProvider\": [],\n \"companies\": [],\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"online\": false\n },\n \"connections\": [\n {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"SAMPLE NAME\",\n \"status\": \"ERROR\",\n \"speed\": 10,\n \"type\": \"LAYER2\",\n \"srcConfigTag\": null,\n \"typeFriendly\": \"IBM Direct Link\"\n },\n {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"SAMPLE NAME2\",\n \"status\": \"ERROR\",\n \"speed\": 10,\n \"type\": \"LAYER2\",\n \"srcConfigTag\": null,\n \"typeFriendly\": \"IBM Direct Link\"\n }\n ],\n \"metro\": {\n \"name\": \"Hong Kong\",\n \"code\": \"HKG\",\n \"country\": \"hk\",\n \"rir\": \"APNIC\",\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ],\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deletedAt\": null,\n \"createdAt\": \"2017-12-18T00:45:44.120Z\",\n \"updatedAt\": \"2024-02-25T05:02:47.267Z\",\n \"logo\": null,\n \"description\": \"a\",\n \"ready\": true,\n \"canCreateController\": false,\n \"deleted\": false,\n \"tags\": []\n }\n }\n ]\n}\n```\n\n
\n\n> **Note:**\n>\n> Take note of your **port ID** (Sample: `results[0].id`).\n\n## I.III. Calculate Pricing\n\n### Request Query Schema\n\n* **Company ID** `companyId` - Your company ID.\n* **Port ID** `portId` - Your port ID.\n\n* **Bandwidth** `bandwidth` - The desired bandwidth or rate limit (in Mbps) for the IO-D service.\n* **Duration value** `durationValue` - The desired duration value\n* **Duration unit** `durationUnit` - The duration unit\n\n> **Info**\n>\n> `durationUnit` Enum values: day (`d`), week (`w`), month (`m`), year (`y`)\n\n> **Note:**\n>\n> Maximum duration value by units: days:`6` | weeks:`3` | months:`36` | years:`3`\n\nSample IO-D Pricing - Company and Port API execution configured with duration of `less` than a month::\n\n```bash\ncurl -X GET \"https://api.test.consoleconnect.com/v2/pricing/gia/byCompanyAndPort?companyId=xxxxxxxxxxxxxxxxxxxxxxxx&portId=xxxxxxxxxxxxxxxxxxxxxxxx&bandwidth=10&durationValue=6&durationUnit=d\"`\\\n -H \"Authorization: Bearer >\"\n```\n\n> **Note**\n>\n> Notice the `durationValue` & `durationUnit` which is equivalent to 6 days. Response may vary based on the configured duration (`more` than or `less` than a month). See **[Common Response Definition](Pricing-Internet-On-Demand#section/IV.-Common-Response-Definition)** for more details.\n\nSee sample response for the pricing details below:\n\n```json\n { \n \"onceOff\": {\n \"giaCost\": 73.97,\n \"ipCosts\": {\n \"ipv426Cost\": 34.52,\n \"ipv427Cost\": 24.66,\n \"ipv428Cost\": 0,\n \"ipv429Cost\": null,\n \"ipv430Cost\": null\n }\n },\n \"burstRate\": 0.004050035038912062,\n \"duration\": {\n \"unit\": \"d\",\n \"value\": 6\n }\n }\n```\n\n# II. Internet On-Demand Pricing - By DCF\n\nThis service calculates IO-D service charge rate by a specific DCF, it accepts **DCF ID** (`dcfId`), **bandwidth** (`bandwidth`), **duration value** (`durationValue`), **duration unit** (`durationUnit`) and an optional **discount code** (`discountCode`) and **company ID** (`companyId`) as query parameters and responds with calculation details based on the configuration provided.\n\n## II.I. Searching DCFs\n\nThis endpoint provides DCF filtering capability and it returns a list of Data Center Facilities (DCF) details.\n\n> **Info**\n>\n> Below is a sample curl command that accepts (`optional`) **criteria**, **page** & **page size** query parameters.\n\n\n```bash\ncurl -X GET \"https://api.consoleconnect.com/v2/data-center-facility/search?criteria={}&page=1&pageSize=10\"`\\\n -H \"Authorization: Bearer \"\n```\n\n
\n\nIf the request was successful, it will respond with a detailed list of DCFs.\n\n```json\n[{\n \"company\": {\n \"privacy\": {\n \"network\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n },\n \"community\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n }\n },\n \"addresses\": [\n {\n \"registered\": false,\n \"address\": \"\",\n \"city\": \"Hong Kong\",\n \"state\": \"\",\n \"zip\": \"zipcode\",\n \"country\": \"HK\",\n \"email\": null,\n \"phone\": null,\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": []\n }\n }\n ],\n \"parentIds\": [],\n \"regionalInternetRegistry\": [],\n \"businessRegistrationCertVerified\": \"UNVERIFIED\",\n \"website\": \"http://www.company.com1\",\n \"emailDomains\": [],\n \"industry\": \"\",\n \"businessDevelopmentManagerTypePreference\": \"UNSPECIFIED\",\n \"isIoTDemoCompany\": false\n },\n \"username\": \"DCF_COMPANY_USERNAME\",\n \"name\": \"SAMPLE-DCF-NAME\",\n \"tags\": [\n \"offnet\",\n \"monthly-ports\"\n ],\n \"dataCenterFacility\": {\n \"airportCodes\": [],\n \"speeds\": [],\n \"metroId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"ready\": true,\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"nniReady\": true,\n \"brandId\": null,\n \"canBundleCrossConnect\": false\n },\n \"stats\": {\n \"members\": 0,\n \"interconnections\": 0,\n \"followers\": 5,\n \"following\": 0,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 0,\n \"events\": 0,\n \"posts\": 0\n },\n \"provider\": [\n \"PCCWGLOBAL\"\n ],\n \"selectiveQinQTunnelProvider\": [],\n \"externalId\": null,\n \"destinationPortOnly\": false,\n \"verified\": true,\n \"nnis\": null,\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"bundleCrossConnectChargeId\": null,\n \"deletedAt\": null,\n \"createdAt\": \"2018-02-20T04:49:09.604Z\",\n \"updatedAt\": \"2024-07-10T04:22:15.894Z\",\n \"products\": [\n {\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"companyId\": null,\n \"dataCenterFacilityId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"slug\": null,\n \"status\": \"PUBLISHED\",\n \"transactionType\": \"ENQUIRE\",\n \"productType\": \"Data centers\",\n \"promoted\": true,\n \"name\": \"Sample Product Name\",\n \"headline\": \"Sample Headline\",\n \"description\": \"Demo description\",\n \"logo\": null,\n \"overviewImage\": null,\n \"background\": null,\n \"categories\": [\n \"Data Center\"\n ],\n \"tags\": null,\n \"promoTitle\": \"Sample Title\",\n \"promoHeadline\": \"Sample Headline\",\n \"callToActionLabel\": \"Order rack\",\n \"callToActionLink\": null,\n \"vendorUrl\": null,\n \"hubspotFormId\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"productFamilyId\": null,\n \"isAddon\": false,\n \"productCode\": null,\n \"created_at\": \"2021-02-16T04:18:06.026Z\",\n \"updated_at\": \"2021-05-19T06:43:38.193Z\"\n }\n ],\n \"isFollowing\": false\n}]\n```\n\n
\n\n> **Info**\n>\n> Take note of **DCF company username** (`[0].username`) and **DCF ID** (`[0].id`)\n\n## II.II. (Optional) Acquiring user details\n\nThe user ID, company ID, and company username is obtained upon execution of API GET /api/auth/token. This provides information to the currently authenticated user\n\n```bash\ncurl -X GET https://api.consoleconnect.com/api/auth/token\\\n -H \"Authorization: Bearer \"\n```\n\nIf the request was successful, it will respond with a JSON object similar to this:\n\n```json\n{\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"companies\": [\n {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Demo\",\n \"username\": \"demo\",\n // other properties...\n }\n ]\n // other properties...\n}\n```\n\n> **Note:**\n>\n> Take note of your **company id** (`companies[0].id`).\n\n## II.III. Calculate Pricing\n\n### Request Query Schema\n\n* **DCF ID** `dcfId` - Data Center Facility (DCF) ID.\n\n* **Bandwidth** `bandwidth` - The desired bandwidth or rate limit (in Mbps) for the IO-D service.\n* **Duration value** `durationValue` - The desired duration value.\n* **Duration unit** `durationUnit` - The duration unit.\n\n> **Info**\n>\n> `durationUnit` Enum values: day (`d`), week (`w`), month (`m`), year (`y`)\n\n> **Note:**\n>\n> Maximum duration value by units: days:`6` | weeks:`3` | months:`36` | years:`3`\n\nSample IO-D Pricing - By DCF API execution configured with duration of `more` than a month:\n\n```bash\ncurl -X GET \"https://api.test.consoleconnect.com/v2/pricing/gia/byDcf?dcfId=xxxxxxxxxxxxxxxxxxxxxxxx&bandwidth=10&durationValue=2&durationUnit=y\"`\\\n -H \"Authorization: Bearer \"\n```\n\n> **Note**\n>\n> Notice the `durationValue` & `durationUnit` which is equivalent to 2 years. Response may vary based on the configured duration (`more` than or `less` than a month). See **[Common Response Definition](Pricing-Internet-On-Demand#section/IV.-Common-Response-Definition)** for more details.\n\nSee sample response for the pricing details below:\n\n```json\n{\n \"contractTotals\": {\n \"giaCost\": 3420,\n \"ipCosts\": {\n \"ipv426Cost\": 1596,\n \"ipv427Cost\": 1140,\n \"ipv428Cost\": 0,\n \"ipv429Cost\": null,\n \"ipv430Cost\": null\n }\n },\n \"unitCosts\": {\n \"giaCost\": 142.5,\n \"ipCosts\": {\n \"ipv426Cost\": 66.5,\n \"ipv427Cost\": 47.5,\n \"ipv428Cost\": 0,\n \"ipv429Cost\": null,\n \"ipv430Cost\": null\n }\n },\n \"contractTotalsAmountSaved\": null,\n \"unitCostsAmountSaved\": null,\n \"burstRate\": 0.04681165489,\n \"duration\": {\n \"unit\": \"y\",\n \"value\": 2\n }\n}\n```\n# III. Internet On-Demand Pricing - By DCF (Bulk)\n\nThis endpoint accepts **DCF ID** (`dcfId`) and **price requests** (`priceRequests`) as query parameters and responds with an array of price calculation details associated with the **price requests** (`priceRequests`) configuration provided in the API request.\n\n## III.I. Searching DCFs\n\nThis endpoint provides DCF filtering capability and it returns a list of Data Center Facilities (DCF) details.\n\n> **Info**\n>\n> Below is a sample curl command that accepts (`optional`) **criteria**, **page** & **page size** query parameters.\n\n\n```bash\ncurl -X GET \"https://api.consoleconnect.com/v2/data-center-facility/search?criteria={}&page=1&pageSize=10\"`\\\n -H \"Authorization: Bearer \"\n```\n\n
\n\nIf the request was successful, it will respond with a detailed list of DCFs.\n\n```json\n[{\n \"company\": {\n \"privacy\": {\n \"network\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n },\n \"community\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n }\n },\n \"addresses\": [\n {\n \"registered\": false,\n \"address\": \"\",\n \"city\": \"Hong Kong\",\n \"state\": \"\",\n \"zip\": \"zipcode\",\n \"country\": \"HK\",\n \"email\": null,\n \"phone\": null,\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": []\n }\n }\n ],\n \"parentIds\": [],\n \"regionalInternetRegistry\": [],\n \"businessRegistrationCertVerified\": \"UNVERIFIED\",\n \"website\": \"http://www.company.com1\",\n \"emailDomains\": [],\n \"industry\": \"\",\n \"businessDevelopmentManagerTypePreference\": \"UNSPECIFIED\",\n \"isIoTDemoCompany\": false\n },\n \"username\": \"DCF_COMPANY_USERNAME\",\n \"name\": \"SAMPLE-DCF-NAME\",\n \"tags\": [\n \"offnet\",\n \"monthly-ports\"\n ],\n \"dataCenterFacility\": {\n \"airportCodes\": [],\n \"speeds\": [],\n \"metroId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"ready\": true,\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"nniReady\": true,\n \"brandId\": null,\n \"canBundleCrossConnect\": false\n },\n \"stats\": {\n \"members\": 0,\n \"interconnections\": 0,\n \"followers\": 5,\n \"following\": 0,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 0,\n \"events\": 0,\n \"posts\": 0\n },\n \"provider\": [\n \"PCCWGLOBAL\"\n ],\n \"selectiveQinQTunnelProvider\": [],\n \"externalId\": null,\n \"destinationPortOnly\": false,\n \"verified\": true,\n \"nnis\": null,\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"bundleCrossConnectChargeId\": null,\n \"deletedAt\": null,\n \"createdAt\": \"2018-02-20T04:49:09.604Z\",\n \"updatedAt\": \"2024-07-10T04:22:15.894Z\",\n \"products\": [\n {\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"companyId\": null,\n \"dataCenterFacilityId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"slug\": null,\n \"status\": \"PUBLISHED\",\n \"transactionType\": \"ENQUIRE\",\n \"productType\": \"Data centers\",\n \"promoted\": true,\n \"name\": \"Sample Product Name\",\n \"headline\": \"Sample Headline\",\n \"description\": \"Demo description\",\n \"logo\": null,\n \"overviewImage\": null,\n \"background\": null,\n \"categories\": [\n \"Data Center\"\n ],\n \"tags\": null,\n \"promoTitle\": \"Sample Title\",\n \"promoHeadline\": \"Sample Headline\",\n \"callToActionLabel\": \"Order rack\",\n \"callToActionLink\": null,\n \"vendorUrl\": null,\n \"hubspotFormId\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"productFamilyId\": null,\n \"isAddon\": false,\n \"productCode\": null,\n \"created_at\": \"2021-02-16T04:18:06.026Z\",\n \"updated_at\": \"2021-05-19T06:43:38.193Z\"\n }\n ],\n \"isFollowing\": false\n}]\n```\n\n
\n\n> **Info**\n>\n> Take note of **DCF ID** (`[0].id`)\n\n## III.II. Calculate Pricing\n\n### Request Query Schema\n\n* **DCF ID** `dcfId` - Your data center facility (DCF) of choice ID.\n* **Price Requests** `priceRequests` - A collection of different IO-D service configuration (bandwidth and duration) you desire to configure your IO-D service with.\n\n **Price Requests item's attributes/fields:**\n * **Bandwidth** `bandwidth` - The desired bandwidth or rate limit (in Mbps) for the IO-D service.\n * **Duration value** `durationValue` - The desired duration value\n * **Duration unit** `durationUnit` - The duration unit\n \n > **Info**\n >\n > `durationUnit` Enum values: day (`d`), week (`w`), month (`m`), year (`y`)\n\n > **Note:**\n >\n > Maximum duration value by units: days:`6` | weeks:`3` | months:`36` | years:`3`\n\nSee below sample curl command, which passes 2 IO-D configuration items in **price requests** (`priceRequests`) query parameter:\n\n* `Index 0` - Configured with service duration of *more* than a month.\n* `Index 1` - Configured with service duration of *less* than a month.\n\n```bash\ncurl -X GET \"https://api.consoleconnect.com/v2/pricing/gia/bulkByDcf?dcfId=xxxxxxxxxxxxxxxxxxxxxxxx&priceRequests=[{\"bandwidth\":10,\"durationValue\":24,\"durationUnit\":\"m\"},{\"bandwidth\":10,\"durationValue\":6,\"durationUnit\":\"d\"}]\"`\\\n -H \"Authorization: Bearer \"\n\n```\n> **Note**\n>\n> Notice the value of priceRequests, `index 0`'s duration value and unit is equivalent to 24 months / 2 years where as `index 1`'s duration value and unit is equivalent to 6 days.\n\nThe expected response for this API Service is an array of price calculation details - each price calculation item corellates with each of the item provided in the **price requests** (`priceRequests`) query parameter for the specified **DCF ID** (`dcfId`). See **[Common Response Definition](Pricing-Internet-On-Demand#section/IV.-Common-Response-Definition)** for more details. \n\n
\n\nSee sample response for the pricing details below.\n\n```json\n[\n { // Recurring - with duration of more than a month\n \"contractTotals\": {\n \"giaCost\": 3420,\n \"ipCosts\": {\n \"ipv426Cost\": 1596,\n \"ipv427Cost\": 1140,\n \"ipv428Cost\": 0,\n \"ipv429Cost\": null,\n \"ipv430Cost\": null\n }\n },\n \"unitCosts\": {\n \"giaCost\": 142.5,\n \"ipCosts\": {\n \"ipv426Cost\": 66.5,\n \"ipv427Cost\": 47.5,\n \"ipv428Cost\": 0,\n \"ipv429Cost\": null,\n \"ipv430Cost\": null\n }\n },\n \"contractTotalsAmountSaved\": null,\n \"unitCostsAmountSaved\": null,\n \"burstRate\": 0.04681165489,\n \"duration\": {\n \"unit\": \"m\",\n \"value\": 24\n }\n },\n { // OnceOff - with duration of less than a month\n \"onceOff\": {\n \"giaCost\": 73.97,\n \"ipCosts\": {\n \"ipv426Cost\": 34.52,\n \"ipv427Cost\": 24.66,\n \"ipv428Cost\": 0,\n \"ipv429Cost\": null,\n \"ipv430Cost\": null\n }\n },\n \"burstRate\": 0.004050035038912062,\n \"duration\": {\n \"unit\": \"d\",\n \"value\": 6\n }\n }\n]\n```\n\n
\n\n# IV. Common Response Definition\n\n*`IO-D Pricing By DCF API`*, *`IO-D Pricing By Company & Ports API`* and *`IO-D Pricing By DCF (Bulk) API`* share similar response structure (*Recurring Response* or *OnceOff Response*) that may vary depending on the provided duration (*less than* or *more than* a month).\n\n## IV.I. Recurring Response\n\n Applicable charges for the service configured with duration of *`more`* than a month. See sample response above `index 0`.\n\n### Property/Attribute Definition\n\n* `contractTotals` - The full duration of service charge rates.\n * `giaCost` - The full duration of service charge rate\n * `ipCost` - The **IP Block** selection/option - each option equivalent to full duration of service charge rate, chargeable on top of `giaCost`.\n* `unitCosts` - Equivalent to monthly service charge rates.\n * `giaCost` - The monthly service charge rate.\n * `ipCost` - The **IP Block** selection/option - each option equivalent to monthly service charge rate, chargeable monthly on top of `giaCost`.\n* `contractTotalsAmountSaved` - The full duration computed saved amount.\n* `unitCostsAmountSaved` - Computed monthly saved amount.\n* `burstRate` - Burst rate/Mbps charge rate.\n* `duration` - Configured duration of service.\n * `value` - The configured duration value for the service.\n * `unit` - The configured duration unit for the service. `Enum:` days (`d`), weeks (`w`), months (`m`), years (`y`).\n\n> **Note:**\n>\n> Depending on your **IP Block** of choice, charges may apply on top of `giaCost`. See `[0].contractTotals.ipCost` or `[0].unitCosts.ipCost` in the response sample above for the price details.\n>\n> Notice `null` and `0` values in both `[0].contractTotals.ipCost` and `[0].unitCosts.ipCost` - `null` is equivalent to *unavailable* and `0` is equivalent to *free of charge*.\n\n## IV.II. OnceOff Response\n\nApplicable charges for the service configured with duration of *`less`* than a month. See sample response above `index 1`.\n\n### Property Definition\n\n* `onceOff` - The full duration of service charge rate and IP Block options charge rate.\n * `giaCost` - The full duration of service charge rate\n * `ipCost` - The **IP Block** selection/option - each option equivalent to full duration of service charge rate, chargeable on top of `giaCost`.\n* `burstRate` - Burst rate/Mbps charge rate.\n* `duration` - Configured duration of service.\n * `value` - The configured duration value for the service.\n * `unit` - The configured duration unit for the service in day(s) (`d`) or in week(s) (`w`).\n", + "x-displayName": "Pricing - Internet On-Demand" + }, + { + "name": "L2_Connection", + "description": "A detailed guideline for creating a port-to-port or business-to-business layer 2 connection request through the Console Connect API Service.\n\n### Prerequisite\n\nThe following requirements must be met to perform the provided code samples.\n\n1. API Key - Contact the Console Connect Support team to request for an API Key Email: **[support@consoleconnect.com](mailto:support@consoleconnect.com)**\n2. Access Rights - User must have role: Network Admin/NETWORKCONTROL. You may verify your role **[here](https://app.consoleconnect.com/settings/members)**\n3. Acceptance of Agreement - API users must sign the Specific Terms for API Use.\n4. Your company has been verified on the Console Connect platform.\n\n# I. Creating a Port-to-Port Layer 2 Connection\n\nAn L2 connectivity in which a user establishes a link between two ports managed by the same organization. This setup indicates that the user has precise knowledge of the ports involved in the connection. Below is a guideline to establish a port-to-port connectivity through the Console Connect API Service.\n\n## I.I. Listing ports for source port and destination port\n\nTo list all ports owned by your company execute the following curl command:\n\n```bash\ncurl -X GET https://api.consoleconnect.com/api/company/:companyUsername/ports?deleted=false`\\\n -H \"Authorization: Bearer \"\n```\n\n
\n\nIf the request was successful, it will respond with a detailed list of ports for the given company.\n\n```json\n{\n \"results\": [\n {\n \"dcpCompanyId\": null,\n \"name\": \"XXXX CONNECTIVITY\",\n \"speed\": {\n \"value\": 1000,\n \"name\": \"1000 Mbps\"\n },\n \"speedOverprovisioningFactor\": 1,\n \"singleService\": false,\n \"locationId\": null,\n \"dataCenterFacilityId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"popId\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"metroId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"status\": \"ACTIVE\",\n \"serviceStatus\": \"OPEN\",\n \"linkState\": \"UP\",\n \"linkStateUpSince\": null,\n \"linkStateSyncedAt\": \"2021-06-08T01:05:03.507Z\",\n \"type\": \"NNI\",\n \"isEdgePort\": false,\n \"edgePayload\": null,\n \"mediaType\": \"COPPER\",\n \"partner\": {\n \"type\": \"NONE\",\n \"connectionSpeeds\": []\n },\n \"ip\": {\n \"ipv4\": null,\n \"ipv6\": null\n },\n \"capabilities\": {\n \"model6Limit\": false,\n \"model6LimitNumber\": null,\n \"singleService\": false\n },\n \"activeChangedAt\": \"2021-06-08T01:05:33.694Z\",\n \"firstActiveAt\": \"2021-06-08T01:05:03.706Z\",\n \"updatedAt\": \"2023-01-24T02:08:29.005Z\",\n \"createdAt\": \"2021-06-08T01:04:59.457Z\",\n \"deleted\": false,\n \"deletedAt\": null,\n \"importedAt\": null,\n \"importer\": null,\n \"salesRecordId\": \"123456\",\n \"paymentType\": \"plan\",\n \"payg\": null,\n \"onboarded\": true,\n \"onboardedBy\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"onboardedAt\": \"2021-06-08T01:04:59.455Z\",\n \"onboardedStatus\": \"COMPLETE\",\n \"onboardedStatusDetail\": null,\n \"onboardedDeviceName\": \"usw01.pop01.hkg39\",\n \"onboardedInterfaceName\": \"GigabitEthernet0/0/11\",\n \"onboardedAllocatedBandwidth\": 10,\n \"billingId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"vlanRanges\": [\n {\n \"start\": 1000,\n \"end\": 1010\n }\n ],\n \"iciLink\": \"A\",\n \"reportingLabels\": [\n \"Meeting place port\"\n ],\n \"supportedServices\": [\n \"L2\"\n ],\n \"cosTransparency\": null,\n \"cosMapping\": {\n \"GOLD\": [\n \"\"\n ],\n \"SILVERPLUS\": [],\n \"SILVER\": [\n \"\"\n ],\n \"BRONZE\": []\n },\n \"externalId\": \"port-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"ticketLink\": null,\n \"crossConnectXcOwner\": null,\n \"crossConnectFullDemarc\": null,\n \"interconnectEnabled\": null,\n \"interconnectProvider\": null,\n \"interconnectOrderNumber\": null,\n \"interconnectCircuitId\": null,\n \"interconnectCompletedAt\": null,\n \"interconnectVlanRange\": null,\n \"interconnectNniPortName\": null,\n \"localLoopEnabled\": null,\n \"localLoopId\": null,\n \"localLoopCustomerId\": null,\n \"localLoopProviderName\": null,\n \"localLoopSalesRecordId\": null,\n \"localLoopBandwidth\": null,\n \"localLoopCompletedAt\": null,\n \"localLoopASideAddress\": null,\n \"localLoopASideXConnectId\": null,\n \"localLoopZSideAddress\": null,\n \"localLoopGsmpId\": null,\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"accessCircuit\": {\n \"crossConnectMediaType\": null\n },\n \"companyId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"capacity\": {\n \"total\": 1000,\n \"utilised\": 365,\n \"remaining\": 635\n },\n \"company\": {\n \"officeAddress\": null,\n \"system\": {\n \"welcomeMessage\": true\n },\n \"company\": {\n \"industry\": null,\n \"companySize\": null,\n \"dateFounded\": null,\n \"clientId\": null,\n \"first\": null,\n \"last\": null,\n \"address\": null,\n \"city\": null,\n \"state\": null,\n \"zip\": null,\n \"phone\": null,\n \"fax\": null,\n \"businessType\": \"Internet Exchange\",\n \"website\": \"sample.com\",\n \"registeredName\": \"updatedone2\",\n \"addresses\": [\n {\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": []\n },\n \"primary\": true,\n \"registered\": true,\n \"address\": \"2 Stuart Road\",\n \"city\": \"Tegucigalpa\",\n \"state\": \"hk\",\n \"zip\": \"4000\",\n \"country\": \"HN\",\n \"email\": null,\n \"phone\": \"01234567891\"\n }\n ],\n \"partnerType\": null,\n \"isIoTDemoCompany\": false\n },\n \"cloudProviderDetails\": {\n \"asn\": {\n \"range\": [\n 4200099007,\n 4200099009\n ]\n },\n \"cloudType\": \"vultr\",\n \"companyType\": \"B2B\",\n \"bgpAuthority\": \"PCCWGLOBAL\"\n },\n \"stats\": {\n \"members\": 186,\n \"interconnections\": 0,\n \"followers\": 0,\n \"following\": 0,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 14,\n \"events\": 0,\n \"posts\": 29\n },\n \"accountManagerEmail\": null,\n \"accountManagerId\": null,\n \"createdAt\": \"2019-08-09T05:32:18.613Z\",\n \"updatedAt\": \"2024-07-25T06:51:06.162Z\",\n \"username\": \"qe1\",\n \"deletedAt\": null,\n \"deleted\": false,\n \"verified\": true,\n \"tags\": [\n \"promoted\"\n ],\n \"status\": \"ACTIVE\",\n \"displayOrder\": 0,\n \"external\": [\n {\n \"id\": \"15\",\n \"type\": \"SDWAN\",\n \"status\": \"UNSYNCED\"\n }\n ],\n \"groups\": [],\n \"location\": null,\n \"summary\": \"

Testing adding new image12

\",\n \"headline\": \"wholesale\",\n \"background\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"avatarId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"SAMPLE NAME\",\n \"type\": \"COMPANY\",\n \"oldAvatarId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"verifiedIdentity\": true,\n \"portsActive\": 14,\n \"categories\": [\n \"Analytics\",\n \"AI\",\n \"IoT\"\n ],\n \"overviewImage\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"isCloudProvider\": true,\n \"signedCompanyRefId\": 4,\n \"signedCompanyVerified\": true,\n \"billingAccount\": \"115475\",\n \"businessRegistrationNumber\": \"123456\",\n \"selectiveQinQTunnelProvider\": [],\n \"companies\": [],\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"online\": false\n },\n \"dataCenterFacility\": {\n \"system\": {\n \"welcomeMessage\": null\n },\n \"company\": {\n \"privacy\": {\n \"network\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n },\n \"community\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n }\n },\n \"businessType\": null,\n \"partnerType\": null,\n \"companySize\": null,\n \"dateFounded\": null,\n \"registeredName\": null,\n \"businessRegistrationCertReference\": null,\n \"businessRegistrationCertUploadedAt\": null,\n \"businessRegistrationCertRejectedReason\": null,\n \"clientId\": null,\n \"first\": null,\n \"last\": null,\n \"address\": null,\n \"city\": null,\n \"state\": null,\n \"zip\": null,\n \"phone\": null,\n \"fax\": null,\n \"addresses\": [\n {\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": []\n },\n \"registered\": false,\n \"address\": \"\",\n \"city\": \"Hong Kong\",\n \"state\": \"\",\n \"zip\": \"zipcode\",\n \"country\": \"HK\",\n \"email\": null,\n \"phone\": null\n }\n ],\n \"regionalInternetRegistry\": [],\n \"businessRegistrationCertVerified\": \"UNVERIFIED\",\n \"website\": \"http://www.company.com1\",\n \"emailDomains\": [],\n \"industry\": \"\",\n \"businessDevelopmentManagerTypePreference\": \"UNSPECIFIED\",\n \"isIoTDemoCompany\": false\n },\n \"dataCenterFacility\": {\n \"airportCodes\": [],\n \"speeds\": [],\n \"metroId\": \"dataCenterFacility\",\n \"ready\": true,\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"nniReady\": true,\n \"brandId\": null,\n \"canBundleCrossConnect\": false\n },\n \"cloudProviderDetails\": {\n \"asn\": {\n \"range\": []\n },\n \"bgpAuthority\": \"PCCWGLOBAL\",\n \"companyType\": \"DCP\"\n },\n \"stats\": {\n \"members\": 0,\n \"interconnections\": 0,\n \"followers\": 5,\n \"following\": 0,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 0,\n \"events\": 0,\n \"posts\": 0\n },\n \"overviewImage\": null,\n \"businessRegistrationNumber\": null,\n \"signedCompanyRefId\": null,\n \"accountManagerEmail\": null,\n \"accountManagerId\": null,\n \"createdAt\": \"2018-02-20T04:49:09.604Z\",\n \"updatedAt\": \"2024-07-10T04:22:15.894Z\",\n \"username\": \"hkg05\",\n \"deletedAt\": null,\n \"deleted\": false,\n \"verified\": true,\n \"tags\": [\n \"offnet\",\n \"monthly-ports\"\n ],\n \"status\": \"ACTIVE\",\n \"displayOrder\": -299,\n \"groups\": [],\n \"location\": null,\n \"summary\": \"\",\n \"headline\": null,\n \"background\": null,\n \"avatarId\": null,\n \"name\": \"hkg39-Asia-HK-APAC\",\n \"type\": \"DATA_CENTER_FACILITY\",\n \"popIds\": [\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n ],\n \"costbookLocationId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"costbookLocation\": {\n \"name\": \"ASIA 1\",\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deletedAt\": null,\n \"createdAt\": \"2019-05-21T04:09:32.819Z\",\n \"updatedAt\": \"2019-11-05T01:31:28.426Z\",\n \"tags\": [\n \"generated\"\n ],\n \"gatewayIds\": [],\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ],\n \"regions\": [\n {\n \"name\": \"APAC\",\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deletedAt\": null,\n \"createdAt\": \"2017-12-18T00:26:28.610Z\",\n \"updatedAt\": \"2018-09-11T04:15:10.124Z\",\n \"deleted\": false,\n \"priceMultiplier\": 1,\n \"insightRegion\": \"Asia\"\n }\n ],\n \"gateways\": []\n },\n \"verifiedIdentity\": false,\n \"provider\": [\n \"PCCWGLOBAL\"\n ],\n \"destinationPortOnly\": false,\n \"categories\": [],\n \"nnis\": null,\n \"isCloudProvider\": false,\n \"l3CostbookLocationId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"bundleCrossConnectChargeId\": null,\n \"signedCompanyVerified\": false,\n \"selectiveQinQTunnelProvider\": [],\n \"companies\": [],\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"online\": false\n },\n \"connections\": [\n {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"SAMPLE NAME\",\n \"status\": \"ERROR\",\n \"speed\": 10,\n \"type\": \"LAYER2\",\n \"srcConfigTag\": null,\n \"typeFriendly\": \"IBM Direct Link\"\n },\n {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"SAMPLE NAME2\",\n \"status\": \"ERROR\",\n \"speed\": 10,\n \"type\": \"LAYER2\",\n \"srcConfigTag\": null,\n \"typeFriendly\": \"IBM Direct Link\"\n }\n ],\n \"metro\": {\n \"name\": \"Hong Kong\",\n \"code\": \"HKG\",\n \"country\": \"hk\",\n \"rir\": \"APNIC\",\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ],\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deletedAt\": null,\n \"createdAt\": \"2017-12-18T00:45:44.120Z\",\n \"updatedAt\": \"2024-02-25T05:02:47.267Z\",\n \"logo\": null,\n \"description\": \"a\",\n \"ready\": true,\n \"canCreateController\": false,\n \"deleted\": false,\n \"tags\": []\n }\n }\n ]\n}\n```\n\n
\n\n> **Note:**\n>\n> Take note of your **port ID** (Sample: `results[0].id`), **speed** (Sample: `results[0].speed`), and **metro ID** (Sample: `results[0].metroId`) of the **destination port**.\n\n## I.II. Creating S2S (Self to Self) Connectivity request\n\nBelow is a sample curl command that will execute the creation of L2 Connection (port to port), it accepts your company username as path parameter.\n\n```bash\ncurl -X PUT https://api.consoleconnect.com/api/v2/company/:companyUsername/connections/layer2`\\\n -H \"Authorization: Bearer \"\n --data-raw '{\n \"name\":\"DEMO-L2-S2S\",\n \"portId\":\"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"destPortId\":\"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"destCompany\": ,\n \"destMetroId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"duration\":1,\n \"durationUnit\":\"m\",\n \"paymentType\":\"invoice\",\n \"classOfService\":\"SILVER\",\n \"speed\":100,\n \"type\":\"LAYER2\",\n \"evergreen\":true\n }' \n```\n\n# II. Creating a Business-to-Business Connection\n\nAn L2 connectivity where in a user initiates a link between two ports managed by separate organizations. Consequently, the user does not have prior knowledge of which specific port will be used for the connection.\n\n## II.I. Listing ports for source port\n\nTo list all ports owned by your company execute the following curl command:\n\n```bash\ncurl -X GET https://api.consoleconnect.com/api/company/:companyUsername/ports?deleted=false`\\\n -H \"Authorization: Bearer \"\n```\n\n
\n\nIf the request was successful, it will respond with a detailed list of ports for the given company.\n\n```json\n{\n \"results\": [\n {\n \"dcpCompanyId\": null,\n \"name\": \"XXXX CONNECTIVITY\",\n \"speed\": {\n \"value\": 1000,\n \"name\": \"1000 Mbps\"\n },\n \"speedOverprovisioningFactor\": 1,\n \"singleService\": false,\n \"locationId\": null,\n \"dataCenterFacilityId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"popId\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"metroId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"status\": \"ACTIVE\",\n \"serviceStatus\": \"OPEN\",\n \"linkState\": \"UP\",\n \"linkStateUpSince\": null,\n \"linkStateSyncedAt\": \"2021-06-08T01:05:03.507Z\",\n \"type\": \"NNI\",\n \"isEdgePort\": false,\n \"edgePayload\": null,\n \"mediaType\": \"COPPER\",\n \"partner\": {\n \"type\": \"NONE\",\n \"connectionSpeeds\": []\n },\n \"ip\": {\n \"ipv4\": null,\n \"ipv6\": null\n },\n \"capabilities\": {\n \"model6Limit\": false,\n \"model6LimitNumber\": null,\n \"singleService\": false\n },\n \"activeChangedAt\": \"2021-06-08T01:05:33.694Z\",\n \"firstActiveAt\": \"2021-06-08T01:05:03.706Z\",\n \"updatedAt\": \"2023-01-24T02:08:29.005Z\",\n \"createdAt\": \"2021-06-08T01:04:59.457Z\",\n \"deleted\": false,\n \"deletedAt\": null,\n \"importedAt\": null,\n \"importer\": null,\n \"salesRecordId\": \"123456\",\n \"paymentType\": \"plan\",\n \"payg\": null,\n \"onboarded\": true,\n \"onboardedBy\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"onboardedAt\": \"2021-06-08T01:04:59.455Z\",\n \"onboardedStatus\": \"COMPLETE\",\n \"onboardedStatusDetail\": null,\n \"onboardedDeviceName\": \"usw01.pop01.hkg39\",\n \"onboardedInterfaceName\": \"GigabitEthernet0/0/11\",\n \"onboardedAllocatedBandwidth\": 10,\n \"billingId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"vlanRanges\": [\n {\n \"start\": 1000,\n \"end\": 1010\n }\n ],\n \"iciLink\": \"A\",\n \"reportingLabels\": [\n \"Meeting place port\"\n ],\n \"supportedServices\": [\n \"L2\"\n ],\n \"cosTransparency\": null,\n \"cosMapping\": {\n \"GOLD\": [\n \"\"\n ],\n \"SILVERPLUS\": [],\n \"SILVER\": [\n \"\"\n ],\n \"BRONZE\": []\n },\n \"externalId\": \"port-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"ticketLink\": null,\n \"crossConnectXcOwner\": null,\n \"crossConnectFullDemarc\": null,\n \"interconnectEnabled\": null,\n \"interconnectProvider\": null,\n \"interconnectOrderNumber\": null,\n \"interconnectCircuitId\": null,\n \"interconnectCompletedAt\": null,\n \"interconnectVlanRange\": null,\n \"interconnectNniPortName\": null,\n \"localLoopEnabled\": null,\n \"localLoopId\": null,\n \"localLoopCustomerId\": null,\n \"localLoopProviderName\": null,\n \"localLoopSalesRecordId\": null,\n \"localLoopBandwidth\": null,\n \"localLoopCompletedAt\": null,\n \"localLoopASideAddress\": null,\n \"localLoopASideXConnectId\": null,\n \"localLoopZSideAddress\": null,\n \"localLoopGsmpId\": null,\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"accessCircuit\": {\n \"crossConnectMediaType\": null\n },\n \"companyId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"capacity\": {\n \"total\": 1000,\n \"utilised\": 365,\n \"remaining\": 635\n },\n \"company\": {\n \"officeAddress\": null,\n \"system\": {\n \"welcomeMessage\": true\n },\n \"company\": {\n \"industry\": null,\n \"companySize\": null,\n \"dateFounded\": null,\n \"clientId\": null,\n \"first\": null,\n \"last\": null,\n \"address\": null,\n \"city\": null,\n \"state\": null,\n \"zip\": null,\n \"phone\": null,\n \"fax\": null,\n \"businessType\": \"Internet Exchange\",\n \"website\": \"sample.com\",\n \"registeredName\": \"updatedone2\",\n \"addresses\": [\n {\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": []\n },\n \"primary\": true,\n \"registered\": true,\n \"address\": \"2 Stuart Road\",\n \"city\": \"Tegucigalpa\",\n \"state\": \"hk\",\n \"zip\": \"4000\",\n \"country\": \"HN\",\n \"email\": null,\n \"phone\": \"01234567891\"\n }\n ],\n \"partnerType\": null,\n \"isIoTDemoCompany\": false\n },\n \"cloudProviderDetails\": {\n \"asn\": {\n \"range\": [\n 4200099007,\n 4200099009\n ]\n },\n \"cloudType\": \"vultr\",\n \"companyType\": \"B2B\",\n \"bgpAuthority\": \"PCCWGLOBAL\"\n },\n \"stats\": {\n \"members\": 186,\n \"interconnections\": 0,\n \"followers\": 0,\n \"following\": 0,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 14,\n \"events\": 0,\n \"posts\": 29\n },\n \"accountManagerEmail\": null,\n \"accountManagerId\": null,\n \"createdAt\": \"2019-08-09T05:32:18.613Z\",\n \"updatedAt\": \"2024-07-25T06:51:06.162Z\",\n \"username\": \"qe1\",\n \"deletedAt\": null,\n \"deleted\": false,\n \"verified\": true,\n \"tags\": [\n \"promoted\"\n ],\n \"status\": \"ACTIVE\",\n \"displayOrder\": 0,\n \"external\": [\n {\n \"id\": \"15\",\n \"type\": \"SDWAN\",\n \"status\": \"UNSYNCED\"\n }\n ],\n \"groups\": [],\n \"location\": null,\n \"summary\": \"

Testing adding new image12

\",\n \"headline\": \"wholesale\",\n \"background\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"avatarId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"SAMPLE NAME\",\n \"type\": \"COMPANY\",\n \"oldAvatarId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"verifiedIdentity\": true,\n \"portsActive\": 14,\n \"categories\": [\n \"Analytics\",\n \"AI\",\n \"IoT\"\n ],\n \"overviewImage\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"isCloudProvider\": true,\n \"signedCompanyRefId\": 4,\n \"signedCompanyVerified\": true,\n \"billingAccount\": \"115475\",\n \"businessRegistrationNumber\": \"123456\",\n \"selectiveQinQTunnelProvider\": [],\n \"companies\": [],\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"online\": false\n },\n \"dataCenterFacility\": {\n \"system\": {\n \"welcomeMessage\": null\n },\n \"company\": {\n \"privacy\": {\n \"network\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n },\n \"community\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n }\n },\n \"businessType\": null,\n \"partnerType\": null,\n \"companySize\": null,\n \"dateFounded\": null,\n \"registeredName\": null,\n \"businessRegistrationCertReference\": null,\n \"businessRegistrationCertUploadedAt\": null,\n \"businessRegistrationCertRejectedReason\": null,\n \"clientId\": null,\n \"first\": null,\n \"last\": null,\n \"address\": null,\n \"city\": null,\n \"state\": null,\n \"zip\": null,\n \"phone\": null,\n \"fax\": null,\n \"addresses\": [\n {\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": []\n },\n \"registered\": false,\n \"address\": \"\",\n \"city\": \"Hong Kong\",\n \"state\": \"\",\n \"zip\": \"zipcode\",\n \"country\": \"HK\",\n \"email\": null,\n \"phone\": null\n }\n ],\n \"regionalInternetRegistry\": [],\n \"businessRegistrationCertVerified\": \"UNVERIFIED\",\n \"website\": \"http://www.company.com1\",\n \"emailDomains\": [],\n \"industry\": \"\",\n \"businessDevelopmentManagerTypePreference\": \"UNSPECIFIED\",\n \"isIoTDemoCompany\": false\n },\n \"dataCenterFacility\": {\n \"airportCodes\": [],\n \"speeds\": [],\n \"metroId\": \"dataCenterFacility\",\n \"ready\": true,\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"nniReady\": true,\n \"brandId\": null,\n \"canBundleCrossConnect\": false\n },\n \"cloudProviderDetails\": {\n \"asn\": {\n \"range\": []\n },\n \"bgpAuthority\": \"PCCWGLOBAL\",\n \"companyType\": \"DCP\"\n },\n \"stats\": {\n \"members\": 0,\n \"interconnections\": 0,\n \"followers\": 5,\n \"following\": 0,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 0,\n \"events\": 0,\n \"posts\": 0\n },\n \"overviewImage\": null,\n \"businessRegistrationNumber\": null,\n \"signedCompanyRefId\": null,\n \"accountManagerEmail\": null,\n \"accountManagerId\": null,\n \"createdAt\": \"2018-02-20T04:49:09.604Z\",\n \"updatedAt\": \"2024-07-10T04:22:15.894Z\",\n \"username\": \"hkg05\",\n \"deletedAt\": null,\n \"deleted\": false,\n \"verified\": true,\n \"tags\": [\n \"offnet\",\n \"monthly-ports\"\n ],\n \"status\": \"ACTIVE\",\n \"displayOrder\": -299,\n \"groups\": [],\n \"location\": null,\n \"summary\": \"\",\n \"headline\": null,\n \"background\": null,\n \"avatarId\": null,\n \"name\": \"hkg39-Asia-HK-APAC\",\n \"type\": \"DATA_CENTER_FACILITY\",\n \"popIds\": [\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n ],\n \"costbookLocationId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"costbookLocation\": {\n \"name\": \"ASIA 1\",\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deletedAt\": null,\n \"createdAt\": \"2019-05-21T04:09:32.819Z\",\n \"updatedAt\": \"2019-11-05T01:31:28.426Z\",\n \"tags\": [\n \"generated\"\n ],\n \"gatewayIds\": [],\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ],\n \"regions\": [\n {\n \"name\": \"APAC\",\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deletedAt\": null,\n \"createdAt\": \"2017-12-18T00:26:28.610Z\",\n \"updatedAt\": \"2018-09-11T04:15:10.124Z\",\n \"deleted\": false,\n \"priceMultiplier\": 1,\n \"insightRegion\": \"Asia\"\n }\n ],\n \"gateways\": []\n },\n \"verifiedIdentity\": false,\n \"provider\": [\n \"PCCWGLOBAL\"\n ],\n \"destinationPortOnly\": false,\n \"categories\": [],\n \"nnis\": null,\n \"isCloudProvider\": false,\n \"l3CostbookLocationId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"bundleCrossConnectChargeId\": null,\n \"signedCompanyVerified\": false,\n \"selectiveQinQTunnelProvider\": [],\n \"companies\": [],\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"online\": false\n },\n \"connections\": [\n {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"SAMPLE NAME\",\n \"status\": \"ERROR\",\n \"speed\": 10,\n \"type\": \"LAYER2\",\n \"srcConfigTag\": null,\n \"typeFriendly\": \"IBM Direct Link\"\n },\n {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"SAMPLE NAME2\",\n \"status\": \"ERROR\",\n \"speed\": 10,\n \"type\": \"LAYER2\",\n \"srcConfigTag\": null,\n \"typeFriendly\": \"IBM Direct Link\"\n }\n ],\n \"metro\": {\n \"name\": \"Hong Kong\",\n \"code\": \"HKG\",\n \"country\": \"hk\",\n \"rir\": \"APNIC\",\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ],\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deletedAt\": null,\n \"createdAt\": \"2017-12-18T00:45:44.120Z\",\n \"updatedAt\": \"2024-02-25T05:02:47.267Z\",\n \"logo\": null,\n \"description\": \"a\",\n \"ready\": true,\n \"canCreateController\": false,\n \"deleted\": false,\n \"tags\": []\n }\n }\n ]\n}\n```\n\n
\n\n> **Info**\n>\n> Take note of your **port ID** (`results[0].id`) as your **source port**\n\n## II.II. Obtaining Metro precense for a specific company\n\nTo obtain the list of company's metro precense and details execute the sample curl command below.\n\n```bash\ncurl -X GET https://api.consoleconnect.com/api/company/:companyUsername/metro/capabilities`\\\n -H \"Authorization: Bearer \"\n```\n\n
\n\nIf the request was successful, it will respond with a detailed list of DCFs.\n\n```json\n{\n \"results\": [\n {\n \"name\": \"Hong Kong\",\n \"code\": \"HKG\",\n \"logo\": null,\n \"canCreateController\": false,\n \"tags\": [],\n \"description\": \"a\",\n \"country\": \"hk\",\n \"rir\": \"APNIC\",\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ],\n \"ready\": true,\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deletedAt\": null,\n \"createdAt\": \"2017-12-18T00:45:44.120Z\",\n \"updatedAt\": \"2024-02-25T05:02:47.267Z\",\n \"deleted\": false,\n \"capabilities\": {\n \"layer2\": true\n },\n \"firstDataCenterFacilityIdInMetro\": \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n }\n ]\n}\n```\n\n
\n\n> **Info**\n>\n> Take note of the **metro ID** (`id`), and **region IDs** (`metro.regionIds`)\n\n## II.III. Searching Data Center Facilities (DCF)\n\nBelow is an example execution of API to filter and return a list Data Center Facilities with details based on the `filter` query parameter.\n\n```bash\ncurl -X GET \"https://api.consoleconnect.com/v2/data-center-facility?filter={\"where\":{\"dataCenterFacility.ready\":true, \"dataCenterFacility.metroId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\"},\"skip\":0,\"limit\":100}\"`\\\n -H \"Authorization: Bearer \"\n```\n\n> **Note**\n>\n> See more filtering samples **[here](Data-Center-Facilities-(DCFs)#operation/getDcfs)**\n\n
\n\nIf the request was successful, it will respond with a detailed list of DCFs.\n\n```json\n[\n {\n \"company\": {\n \"privacy\": {\n \"network\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n },\n \"community\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n }\n },\n \"addresses\": [\n {\n \"registered\": false,\n \"address\": \"\",\n \"city\": \"Hong Kong\",\n \"state\": \"\",\n \"zip\": \"zipcode\",\n \"country\": \"HK\",\n \"email\": null,\n \"phone\": null,\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": [\n \"114.177216\",\n \"22.302711\"\n ]\n }\n }\n ],\n \"parentIds\": [],\n \"regionalInternetRegistry\": [],\n \"businessRegistrationCertVerified\": \"UNVERIFIED\",\n \"website\": \"http://www.company.com1\",\n \"emailDomains\": [],\n \"industry\": \"\",\n \"businessDevelopmentManagerTypePreference\": \"UNSPECIFIED\",\n \"isIoTDemoCompany\": false\n },\n \"username\": \"hkg05\",\n \"name\": \"hkg39-Asia-HK-APAC\",\n \"tags\": [\n \"offnet\",\n \"monthly-ports\"\n ],\n \"dataCenterFacility\": {\n \"airportCodes\": [],\n \"speeds\": [],\n \"metroId\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"ready\": true,\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"nniReady\": true,\n \"brandId\": null,\n \"canBundleCrossConnect\": false\n },\n \"stats\": {\n \"members\": 0,\n \"interconnections\": 0,\n \"followers\": 5,\n \"following\": 0,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 0,\n \"events\": 0,\n \"posts\": 0\n },\n \"provider\": [\n \"PCCWGLOBAL\"\n ],\n \"selectiveQinQTunnelProvider\": [],\n \"externalId\": null,\n \"destinationPortOnly\": false,\n \"verified\": true,\n \"nnis\": null,\n \"costbookLocationId\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"bundleCrossConnectChargeId\": null,\n \"deletedAt\": null,\n \"createdAt\": \"2018-02-20T04:49:09.604Z\",\n \"updatedAt\": \"2024-11-15T00:23:58.765Z\"\n },\n {\n \"company\": {\n \"privacy\": {\n \"network\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n },\n \"community\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n }\n },\n \"addresses\": [\n {\n \"primary\": true,\n \"registered\": false,\n \"address\": \"Mega-iAdvantage, 399 Chai Wan Road\",\n \"city\": \"Hong Kong\",\n \"state\": null,\n \"zip\": null,\n \"country\": \"HK\",\n \"email\": null,\n \"phone\": null,\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": [\n \"22.26637\",\n \"114.24658\"\n ]\n }\n }\n ],\n \"parentIds\": [],\n \"regionalInternetRegistry\": [],\n \"businessRegistrationCertVerified\": \"UNVERIFIED\",\n \"website\": \"https://sample.com\",\n \"emailDomains\": [],\n \"businessDevelopmentManagerTypePreference\": \"UNSPECIFIED\",\n \"isIoTDemoCompany\": false\n },\n \"username\": \"sample1\",\n \"name\": \"Sample\",\n \"tags\": [\n \"free-cross-connect\",\n \"free\"\n ],\n \"dataCenterFacility\": {\n \"airportCodes\": [\n \"\"\n ],\n \"speeds\": [],\n \"metroId\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"ready\": true,\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"nniReady\": true,\n \"brandId\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"canBundleCrossConnect\": false\n },\n \"stats\": {\n \"members\": 0,\n \"interconnections\": 0,\n \"followers\": 3,\n \"following\": 0,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 0,\n \"events\": 0,\n \"posts\": 0\n },\n \"provider\": [\n \"PCCWGLOBAL\"\n ],\n \"selectiveQinQTunnelProvider\": [],\n \"externalId\": null,\n \"destinationPortOnly\": false,\n \"verified\": true,\n \"nnis\": null,\n \"costbookLocationId\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"bundleCrossConnectChargeId\": null,\n \"deletedAt\": null,\n \"createdAt\": \"2018-02-20T04:50:25.328Z\",\n \"updatedAt\": \"2024-11-25T06:09:28.667Z\"\n }\n]\n```\n\n
\n\n> **Info**\n>\n> Take note of the **DCF ID** (`[0].id`).\n\n## II.IV. Creating B2B (Business to Business) Connectivity Request\n\nBelow is a sample curl command that will execute the creation of L2 Connection (Business to Business) request, it accepts your company username as path parameter.\n\n```bash\ncurl -X PUT https://api.consoleconnect.com/api/v2/company/:companyUsername/connections/layer2`\\\n -H \"Authorization: Bearer \"\n --data-raw '{\n \"name\":\"DEMO-L2-B2B-for-docs\",\n \"portId\":\"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"destCompany\": ,\n \"destDcf\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"destMetroId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"destRegionId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"duration\":1,\n \"durationUnit\":\"m\",\n \"paymentType\":\"invoice\",\n \"classOfService\":\"SILVER\",\n \"speed\":100,\n \"type\":\"LAYER2\",\n \"evergreen\":true\n }' \n```\n", + "x-displayName": "Creating L2 Connection" + }, + { + "name": "CloudRouter_Guide", + "description": "Prepare to work with CloudRouter via the Console Connect API.\n\n### Prerequisites\n\nThe following requirements must be met to perform the provided code samples:\n\n1. API Key - Contact the Console Connect Support team to request an API Key Email: **[support@consoleconnect.com](mailto:support@consoleconnect.com)**\n2. Access Rights - User must have role: Network Admin/NETWORKCONTROL. You may verify your role **[here](https://app.consoleconnect.com/settings/members)**\n3. Acceptance of Agreement - API users must sign the Specific Terms for API Use.\n4. Your company has been verified on the Console Connect platform.\n\n# I. Prerequisite Procedures\nObtain the relevant data required for working with CloudRouters.\n\n## I.I. Get user details\n\nGet the currently authenticated user ID, company ID, and company username by executing the API GET /api/auth/token.\n\n```bash\ncurl -X GET https://api.consoleconnect.com/api/auth/token\\\n -H \"Authorization: Bearer \"\n```\n\nIf the request was successful, you will receive a JSON object like this:\n\n```json\n{\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"companies\": [\n {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Demo\",\n \"username\": \"demo\",\n // other properties...\n }\n ]\n // other properties...\n}\n```\n> **Note:**\n>\n> Take note of your **user id** (`id`), **company id** (`companies[0].id`), and **company username** (`companies[0].username`).\n\n# II. Query existing CloudRouters\n\n## II.I. Query CloudRouters\n\nTo check all existing CloudRouters in your company execute the following curl command:\n\n```bash\ncurl -X GET https://api.consoleconnect.com/app-user/:companyId/l3vpns`\\\n -H \"Authorization: Bearer \"\n```\n
\n\nIf the request was successful, you will receive a list of L3VPN/CloudRouter details:\n\n```json\n[\n {\n \"name\": \"L3VPN Demo\",\n \"requestSource\": \"CONSOLE_APP\",\n \"status\": \"CREATED\",\n \"id\": \"674ff3279ab4acdb2ac7b3b6\",\n \"paymentMethod\": \"creditcard\",\n \"duration\": {\n \"quantity\": 2,\n \"unit\": \"m\"\n },\n \"bandwidth\": \"500MB\",\n \"companyId\": \"674ff3d003a5d7fb864139f3\",\n \"deletedAt\": null,\n \"createdAt\": \"2024-04-12T04:51:59.890Z\",\n \"updatedAt\": \"2024-04-12T04:52:01.587Z\",\n \"sites\": [\n {\n \"id\": \"60740afb-fa45-4b2e-b8c8-1b90407c3edc\",\n \"companyId\": \"674ff3d003a5d7fb864139f3\",\n \"l3vpnId\": \"674ff3279ab4acdb2ac7b3b6\",\n \"name\": \"Sample Site\",\n \"type\": \"COMPANY\",\n \"portId\": \"674ff43dfbd6059e1483bce3\",\n \"slVlanId\": \"103\",\n \"rateLimit\": {\n \"rate\": 50,\n \"unit\": \"Mbps\"\n },\n \"mtu\": null,\n \"classOfService\": [\n {\n \"name\": \"BRONZE\",\n \"value\": 0\n },\n {\n \"name\": \"SILVER\",\n \"value\": 0\n },\n {\n \"name\": \"GOLD\",\n \"value\": 100\n }\n ],\n \"redundancySiteType\": \"primary\",\n \"redundancyLinkedSiteId\": null,\n \"status\": \"DELETING\",\n \"simPoolId\": null,\n \"company_id\": \"674ff3d003a5d7fb864139f3\",\n \"l3vpn_id\": \"674ff3279ab4acdb2ac7b3b6\",\n \"sim_pool_id\": null,\n \"deleted_at\": null,\n \"created_at\": \"2024-04-12T04:53:30.629Z\",\n \"updated_at\": \"2024-05-21T06:59:52.316Z\",\n \"port_id\": \"674ff43dfbd6059e1483bce3\",\n \"peers\": [\n {\n \"id\": \"c11a8cbb-f7c8-4e0f-9d08-e9180fd8f3a3\",\n \"companyId\": \"674ff3d003a5d7fb864139f3\",\n \"l3vpnSiteId\": \"60740afb-fa45-4b2e-b8c8-1b90407c3edc\",\n \"slPeerUuid\": \"95e78516-11e2-4ec2-9ad8-6d0963d23a62\",\n \"type\": \"SELF\",\n \"partner\": {},\n \"status\": \"DELETING\",\n \"bgpKey\": \"gpY2o2TIaWEo03M6EGHavCbG\",\n \"asn\": 64512,\n \"externalIp\": \"10.124.208.58/30\",\n \"internalIp\": \"10.124.208.57/30\",\n \"subnet\": \"10.124.208.56/30\",\n \"defaultOriginate\": false,\n \"company_id\": \"674ff3d003a5d7fb864139f3\",\n \"l3vpn_site_id\": \"60740afb-fa45-4b2e-b8c8-1b90407c3edc\",\n \"deleted_at\": null,\n \"created_at\": \"2024-04-12T04:54:12.271Z\",\n \"updated_at\": \"2024-05-21T06:59:52.523Z\"\n }\n ],\n \"providerInfo\": {\n \"city\": \"Taipei\",\n \"country\": \"TW\",\n \"countryDisplayName\": \"Taiwan\",\n \"metroName\": \"Taipei\",\n \"dcfName\": \"123Chief Telecom - Taipei - UAT\",\n \"companyName\": \"QE1\",\n \"companyUsername\": \"qe1\",\n \"portName\": \"test port capacity\",\n \"portId\": \"674ff43dfbd6059e1483bce3\",\n \"dcfId\": \"674ff4b319b90dc02d2bd8bd\",\n \"metroId\": \"674ff4badfbe4a8f03dae4ac\",\n \"companyId\": \"674ff3d003a5d7fb864139f3\",\n \"portPartner\": {\n \"type\": \"NONE\",\n \"connectionSpeeds\": []\n }\n }\n }\n ],\n \"calculatedCapacity\": {\n \"total\": 500,\n \"used\": 50,\n \"remaining\": 450\n }\n }\n]\n```\n
\n\nNow that you have the **userId**, **companyId** and **l3vpnId**, you can perform all the processes listed in the CloudRouter API documentation.\n", + "x-displayName": "CloudRouter Preparations" + }, + { + "name": "Ordering_Ports_Guide", + "description": "A detailed guide to ordering ports through the Console Connect API.\n### Prerequisites\n\nThe following requirements must be met to perform the provided code samples.\n\n1. API Key - Contact the Console Connect Support team to request a key: [support@consoleconnect.com](mailto:support@consoleconnect.com)\n2. Access Rights - User must have role: Network Admin/NETWORKCONTROL. You may verify your role [here](https://app.consoleconnect.com/settings/members)\n3. Acceptance of Agreement - API users must sign the [Specific Terms for API Use](https://api.consoleconnect.com/docs/tag/Agreements)\n4. Your company has been verified on the Console Connect platform.\n\n# I. Preparation\n\n## I.I. Retrieve Data Center Facilities (DCF)\n\nThe following sample queries the API for a list of Data Center Facilities with details, using the `filter` parameter.\n\n```bash\ncurl -X GET \"https://api.consoleconnect.com/v2/data-center-facility?filter={\"where\":{\"dataCenterFacility.ready\":true},\"skip\":0,\"limit\":100}\"`\\\n -H \"Authorization: Bearer \"\n```\n\n> **Note**\n>\n> See more filtering samples [here](Data-Center-Facilities-(DCFs)#operation/getDcfs)\n\n
\n\nA successful request will return a detailed list of DCFs.\n\n```json\n[\n {\n \"company\": {\n \"privacy\": {\n \"network\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n },\n \"community\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n }\n },\n \"addresses\": [\n {\n \"registered\": false,\n \"address\": \"\",\n \"city\": \"Hong Kong\",\n \"state\": \"\",\n \"zip\": \"zipcode\",\n \"country\": \"HK\",\n \"email\": null,\n \"phone\": null,\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": [\n \"114.177216\",\n \"22.302711\"\n ]\n }\n }\n ],\n \"parentIds\": [],\n \"regionalInternetRegistry\": [],\n \"businessRegistrationCertVerified\": \"UNVERIFIED\",\n \"website\": \"http://www.company.com1\",\n \"emailDomains\": [],\n \"industry\": \"\",\n \"businessDevelopmentManagerTypePreference\": \"UNSPECIFIED\",\n \"isIoTDemoCompany\": false\n },\n \"username\": \"hkg05\",\n \"name\": \"hkg39-Asia-HK-APAC\",\n \"tags\": [\n \"offnet\",\n \"monthly-ports\"\n ],\n \"dataCenterFacility\": {\n \"airportCodes\": [],\n \"speeds\": [],\n \"metroId\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"ready\": true,\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"nniReady\": true,\n \"brandId\": null,\n \"canBundleCrossConnect\": false\n },\n \"stats\": {\n \"members\": 0,\n \"interconnections\": 0,\n \"followers\": 5,\n \"following\": 0,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 0,\n \"events\": 0,\n \"posts\": 0\n },\n \"provider\": [\n \"PCCWGLOBAL\"\n ],\n \"selectiveQinQTunnelProvider\": [],\n \"externalId\": null,\n \"destinationPortOnly\": false,\n \"verified\": true,\n \"nnis\": null,\n \"costbookLocationId\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"bundleCrossConnectChargeId\": null,\n \"deletedAt\": null,\n \"createdAt\": \"2018-02-20T04:49:09.604Z\",\n \"updatedAt\": \"2024-11-15T00:23:58.765Z\"\n },\n {\n \"company\": {\n \"privacy\": {\n \"network\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n },\n \"community\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n }\n },\n \"addresses\": [\n {\n \"primary\": true,\n \"registered\": false,\n \"address\": \"Mega-iAdvantage, 399 Chai Wan Road\",\n \"city\": \"Hong Kong\",\n \"state\": null,\n \"zip\": null,\n \"country\": \"HK\",\n \"email\": null,\n \"phone\": null,\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": [\n \"22.26637\",\n \"114.24658\"\n ]\n }\n }\n ],\n \"parentIds\": [],\n \"regionalInternetRegistry\": [],\n \"businessRegistrationCertVerified\": \"UNVERIFIED\",\n \"website\": \"https://sample.com\",\n \"emailDomains\": [],\n \"businessDevelopmentManagerTypePreference\": \"UNSPECIFIED\",\n \"isIoTDemoCompany\": false\n },\n \"username\": \"sample1\",\n \"name\": \"Sample\",\n \"tags\": [\n \"free-cross-connect\",\n \"free\"\n ],\n \"dataCenterFacility\": {\n \"airportCodes\": [\n \"\"\n ],\n \"speeds\": [],\n \"metroId\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"ready\": true,\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"nniReady\": true,\n \"brandId\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"canBundleCrossConnect\": false\n },\n \"stats\": {\n \"members\": 0,\n \"interconnections\": 0,\n \"followers\": 3,\n \"following\": 0,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 0,\n \"events\": 0,\n \"posts\": 0\n },\n \"provider\": [\n \"PCCWGLOBAL\"\n ],\n \"selectiveQinQTunnelProvider\": [],\n \"externalId\": null,\n \"destinationPortOnly\": false,\n \"verified\": true,\n \"nnis\": null,\n \"costbookLocationId\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"bundleCrossConnectChargeId\": null,\n \"deletedAt\": null,\n \"createdAt\": \"2018-02-20T04:50:25.328Z\",\n \"updatedAt\": \"2024-11-25T06:09:28.667Z\"\n }\n]\n```\n\n
\n\n> **Info**\n>\n> Take note of the **DCF username** (`[0].username`), **Tags** (`[0].tags`) and the list of valid **speeds** (`[0].dataCenterFacility.speeds`) for the selected DCF.\n\n# II. Reserving a Port\n\nYou can reserve a port by submitting a port order.\n\n## II.I. Submit a port order\n\nThe following sample demonstrates how to order a port.\n\n```bash\ncurl -X PUT https://api.consoleconnect.com/api/company/:companyUsername/ports/orders`\\\n -H \"Authorization: Bearer \"\n --data-raw '{\n \"dataCenterFacility\": ,\n \"speed\": \"1000\",\n \"durationUnit\": \"y\",\n \"portName\": \"SAMPLE-PORT-NAME\",\n \"paymentType\": \"invoice\"\n }' \n```\n\n> **Note**\n>\n> Only valid speed values indicated in the DCF list will be accepted.\n\n
\n\nIf successful, the API respond with port order details similar to the JSON below.\n\n```json\n{\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"portName\": \"Sample-port-for-docs\",\n \"speed\": {\n \"value\": 1000,\n \"name\": \"1000 Mbps\"\n },\n \"paymentType\": \"invoice\",\n \"discountId\": null,\n \"billingId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"externalId\": null,\n \"salesRecordId\": null,\n \"paymentTransactionId\": null,\n \"payg\": true,\n \"status\": \"created\",\n \"loaStatus\": \"TODO\",\n \"isEdgePort\": false,\n \"cancelled\": false,\n \"edgePayload\": null,\n \"requestSource\": \"CONSOLE_API\",\n \"createdBy\": \"username_of_creator\",\n \"tags\": [],\n \"type\": \"PHYSICAL\",\n \"isManualCreate\": false,\n \"isManagedEdgePort\": false,\n \"dataCenterFacilityId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"metroId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"companyId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"crossConnectId\": null,\n \"deleted\": false,\n \"deletedAt\": null,\n \"createdAt\": \"2024-11-27T23:12:16.647Z\",\n \"updatedAt\": \"2024-11-27T23:12:16.958Z\",\n \"durationUnit\": \"y\",\n \"company\": {\n \"officeAddress\": null,\n \"system\": {\n \"welcomeMessage\": true\n },\n \"company\": {\n \"industry\": null,\n \"companySize\": null,\n \"dateFounded\": null,\n \"clientId\": null,\n \"first\": null,\n \"last\": null,\n \"address\": null,\n \"city\": null,\n \"state\": null,\n \"zip\": null,\n \"phone\": null,\n \"fax\": null,\n \"businessType\": \"Internet Exchange\",\n \"website\": \"sample.com\",\n \"registeredName\": \"updatedone2\",\n \"addresses\": [\n {\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": []\n },\n \"primary\": true,\n \"registered\": true,\n \"address\": \"2 Stuart Road\",\n \"city\": \"Tegucigalpa\",\n \"state\": \"hk\",\n \"zip\": \"4000\",\n \"country\": \"HN\",\n \"email\": null,\n \"phone\": \"01234567891\"\n }\n ],\n \"partnerType\": \"Partner DC\",\n \"isIoTDemoCompany\": false\n },\n \"cloudProviderDetails\": {\n \"asn\": {\n \"range\": [\n 4200099007,\n 4200099009\n ]\n },\n \"cloudType\": \"vultr\",\n \"companyType\": \"B2B\",\n \"bgpAuthority\": \"PCCWGLOBAL\"\n },\n \"stats\": {\n \"members\": 210,\n \"interconnections\": 0,\n \"followers\": 0,\n \"following\": 3,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 14,\n \"events\": 0,\n \"posts\": 29\n },\n \"country\": null,\n \"accountManagerEmail\": null,\n \"accountManagerId\": null,\n \"createdAt\": \"2019-08-09T05:32:18.613Z\",\n \"updatedAt\": \"2024-11-27T03:09:46.136Z\",\n \"username\": \"qe1\",\n \"deletedAt\": null,\n \"deleted\": false,\n \"verified\": true,\n \"tags\": [\n \"promoted\"\n ],\n \"status\": \"ACTIVE\",\n \"displayOrder\": 0,\n \"external\": [\n {\n \"id\": \"15\",\n \"type\": \"SDWAN\",\n \"status\": \"UNSYNCED\"\n }\n ],\n \"groups\": [],\n \"location\": null,\n \"summary\": \"

Testing adding new image12

\",\n \"headline\": \"wholesale\",\n \"background\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"avatarId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"My Company\",\n \"type\": \"COMPANY\",\n \"oldAvatarId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"verifiedIdentity\": true,\n \"portsActive\": 13,\n \"categories\": [\n \"Analytics\",\n \"AI\",\n \"IoT\"\n ],\n \"overviewImage\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"isCloudProvider\": true,\n \"signedCompanyRefId\": 3,\n \"signedCompanyVerified\": true,\n \"billingAccount\": \"139096\",\n \"businessRegistrationNumber\": \"123456\",\n \"selectiveQinQTunnelProvider\": [],\n \"isPublicL2Provider\": true,\n \"companies\": [],\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"online\": false\n },\n \"dataCenterFacility\": {\n \"system\": {\n \"welcomeMessage\": null\n },\n \"company\": {\n \"privacy\": {\n \"network\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n },\n \"community\": {\n \"mode\": \"PUBLIC\",\n \"blackListIds\": [],\n \"whiteListIds\": []\n }\n },\n \"industry\": null,\n \"businessType\": null,\n \"partnerType\": null,\n \"companySize\": null,\n \"dateFounded\": null,\n \"registeredName\": null,\n \"businessRegistrationCertReference\": null,\n \"businessRegistrationCertUploadedAt\": null,\n \"businessRegistrationCertRejectedReason\": null,\n \"clientId\": null,\n \"first\": null,\n \"last\": null,\n \"address\": null,\n \"city\": null,\n \"state\": null,\n \"zip\": null,\n \"phone\": null,\n \"fax\": null,\n \"addresses\": [\n {\n \"geo\": {\n \"type\": \"Point\",\n \"coordinates\": [\n \"28.26637\",\n \"194.24658\"\n ]\n },\n \"primary\": true,\n \"registered\": false,\n \"address\": \"Sample DCF, 112 Chai Wan Road\",\n \"city\": \"Hong Kong\",\n \"state\": null,\n \"zip\": null,\n \"country\": \"HK\",\n \"email\": null,\n \"phone\": null\n }\n ],\n \"regionalInternetRegistry\": [],\n \"businessRegistrationCertVerified\": \"UNVERIFIED\",\n \"website\": \"https://www.sample.net/index.php/locations/sample\",\n \"emailDomains\": [],\n \"businessDevelopmentManagerTypePreference\": \"UNSPECIFIED\",\n \"isIoTDemoCompany\": false\n },\n \"dataCenterFacility\": {\n \"airportCodes\": [\n \"\"\n ],\n \"speeds\": [],\n \"metroId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"ready\": true,\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"nniReady\": true,\n \"brandId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"canBundleCrossConnect\": false\n },\n \"cloudProviderDetails\": {\n \"asn\": {\n \"range\": []\n },\n \"bgpAuthority\": \"PCCWGLOBAL\",\n \"companyType\": \"DCP\"\n },\n \"stats\": {\n \"members\": 0,\n \"interconnections\": 0,\n \"followers\": 3,\n \"following\": 0,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 0,\n \"events\": 0,\n \"posts\": 0\n },\n \"overviewImage\": null,\n \"country\": null,\n \"businessRegistrationNumber\": null,\n \"isPublicL2Provider\": false,\n \"signedCompanyRefId\": null,\n \"accountManagerEmail\": null,\n \"accountManagerId\": null,\n \"createdAt\": \"2018-02-20T04:50:25.328Z\",\n \"updatedAt\": \"2024-11-25T06:09:28.667Z\",\n \"username\": \"sampledcf\",\n \"deletedAt\": null,\n \"deleted\": false,\n \"verified\": true,\n \"tags\": [\n \"free-cross-connect\",\n \"free\"\n ],\n \"status\": \"ACTIVE\",\n \"displayOrder\": -299,\n \"groups\": [],\n \"location\": null,\n \"summary\": null,\n \"headline\": null,\n \"background\": null,\n \"avatarId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Sample DCF\",\n \"type\": \"DATA_CENTER_FACILITY\",\n \"popIds\": [\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n ],\n \"costbookLocationId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"costbookLocation\": {\n \"name\": \"ASIA 1\",\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deletedAt\": null,\n \"createdAt\": \"2019-05-21T04:09:32.819Z\",\n \"updatedAt\": \"2019-11-05T01:31:28.426Z\",\n \"tags\": [\n \"generated\"\n ],\n \"gatewayIds\": [],\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ],\n \"regions\": [\n {\n \"name\": \"APAC\",\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deletedAt\": null,\n \"createdAt\": \"2017-12-18T00:26:28.610Z\",\n \"updatedAt\": \"2020-08-26T03:37:52.387Z\",\n \"deleted\": false,\n \"priceMultiplier\": 1,\n \"insightRegion\": \"Asia\"\n }\n ],\n \"gateways\": []\n },\n \"provider\": [\n \"PCCWGLOBAL\"\n ],\n \"verifiedIdentity\": false,\n \"destinationPortOnly\": false,\n \"categories\": [],\n \"nnis\": null,\n \"isCloudProvider\": false,\n \"l3CostbookLocationId\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"bundleCrossConnectChargeId\": null,\n \"selectiveQinQTunnelProvider\": [],\n \"signedCompanyVerified\": false,\n \"companies\": [],\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"online\": false\n },\n \"metro\": {\n \"name\": \"Hong Kong\",\n \"code\": \"HKG\",\n \"logo\": null,\n \"canCreateController\": false,\n \"tags\": [],\n \"description\": \"a\",\n \"country\": \"hk\",\n \"rir\": \"APNIC\",\n \"regionIds\": [\n \"xxxxxxxxxxxxxxxxxxxxxxxx\"\n ],\n \"ready\": true,\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deletedAt\": null,\n \"createdAt\": \"2017-12-18T00:45:44.120Z\",\n \"updatedAt\": \"2024-02-25T05:02:47.267Z\",\n \"deleted\": false\n },\n \"capabilities\": {}\n}\n```\n\n
\n\n> **Note**\n>\n> Take note of your **Order ID** (`id`).\n\n## II.II. Letter Of Authorization\n\nThis section provides details to Letter of Authorization (LOA)\n\n### On-Net with Cross Connect add-on / On-Net with Free Cross Connect\n\nUpon successful execution of the Port Ordering API, an email will be sent to the user who initiated the order - in this case, the user with the API Key. The email will include a button or link to upload a Letter of Authorization (LOA). This LOA grants the Console Connect Team authorization to proceed with the installation of the cross connect to the customer's port.\n\n> **Note**\n>\n> LOAs for on-net data centers will be available in around 24 hours.\n\n### On-Net without Cross Connect add-on\n\nUpon successful execution of the Port Ordering API, an email will be sent to the user who initiated the order - in this case, the user with the API Key. Console Connect will then upload the Letter of Authorization (LOA) for the port, granting the customer authorization to install the cross connect independently.\n\n> **Note**\n>\n> For extended (off-net) locations, the LOA may take 4-6 weeks.\n\n### Off-Net\n\nUpon successful execution of the Port Ordering API, a confirmation email will be sent to the user who initiated the order. The Console Connect team will then place an order for the interconnect to the remote data center through a partner. Once the partner has completed the interconnect installation, Console Connect will obtain the Letter of Authorization (LOA) from the partner and forward it to the customer, who will also be able to download the LOA from the port order.\n\n## II.III. Obtaining Order Details\n\nThis Section describes how to track order status and get other order information.\n\n```bash\ncurl -X GET \"https://api.consoleconnect.com/api/company/:companyName/ports/orders/:orderId\"`\\\n -H \"Authorization: Bearer \"\n```\nFor more information on your port order status please refer to our **[Create a port order/reservation page](Port-Orders#operation/CreatePortOrder)**\n
\n\nIf the request was successful, will return the port order details similar to the JSON below.\n\n```json\n{\n \"billingId\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"cancelled\": false,\n \"cancelledAt\": \"1970-01-01T00:00:00.000Z\",\n \"cancelledBy\": null,\n \"company\": {\n \"tags\": [],\n \"__v\": 0,\n \"avatar\": null,\n \"avatarId\": null,\n \"background\": null,\n \"capabilities\": {},\n \"companies\": [],\n \"company\": {},\n \"createdAt\": \"2017-02-06T23:20:46.291Z\",\n \"defaultPaymentType\": null,\n \"deleted\": false,\n \"deletedAt\": null,\n \"displayOrder\": -299,\n \"groups\": [],\n \"headline\": null,\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"isSupport\": false,\n \"legalEntityId\": null,\n \"linkUserCompany\": {},\n \"location\": null,\n \"name\": \"Company 1\",\n \"online\": false,\n \"optIntoMarketingEmail\": false,\n \"overviewImage\": null,\n \"phone\": null,\n \"popIds\": [],\n \"stats\": {},\n \"status\": \"ACTIVE\",\n \"summary\": null,\n \"system\": {},\n \"type\": \"COMPANY\",\n \"updatedAt\": \"2017-02-06T23:20:46.291Z\",\n \"username\": \"company1\",\n \"verified\": true,\n \"verifiedIdentity\": true\n },\n \"controller\": {\n \"asn\": null,\n \"cerAsn\": null,\n \"cerIp\": {},\n \"id\": null,\n \"ip\": {},\n \"serviceLayerId\": null,\n \"vlan\": null\n },\n \"createdAt\": \"2016-03-02T07:07:28.195Z\",\n \"createdBy\": \"stan\",\n \"deleted\": false,\n \"deletedAt\": \"1970-01-01T00:00:00.000Z\",\n \"deletedBy\": null,\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"locationId\": null,\n \"crossConnectId\": null,\n \"message\": null,\n \"metro\": {\n \"country\": \"USA\",\n \"createdAt\": \"2016-02-12T09:01:33.840Z\",\n \"deleted\": false,\n \"deletedAt\": null,\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"SJC\",\n \"updatedAt\": \"2016-02-12T09:01:33.840Z\"\n },\n \"port\": {\n \"activeChangedAt\": \"2016-03-02T07:07:27.147Z\",\n \"createdAt\": \"2016-03-02T07:07:27.148Z\",\n \"dataCenterFacilityId\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"deleted\": false,\n \"deletedAt\": \"1970-01-01T00:00:00.000Z\",\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"ip\": {},\n \"locationId\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"metroId\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"PORT_1\",\n \"portId\": null,\n \"speed\": 1000,\n \"status\": \"UNKNOWN\",\n \"type\": \"PHYSICAL_NSP\",\n \"updatedAt\": \"2016-03-02T07:07:27.148Z\",\n \"vlan\": null\n },\n \"portName\": \"PORT_1\",\n \"speed\": {\n \"name\": \"1000 Mbps\",\n \"value\": 1000\n },\n \"status\": \"created\",\n \"updatedAt\": \"2016-03-02T07:07:28.195Z\",\n \"updatedBy\": null\n}\n```\n\n
\n\n> **Note**\n>\n> Take note of your **Order Status** (`.status`).", + "x-displayName": "Ordering Ports" + }, + { + "name": "Manage_Company", + "description": "A detailed guideline for preparing the prerequisites for Company APIs through Console Connect API Service. This guide will show how to manage your company, by creating a new company, adding members, setting roles and removing members.\n\nFor further information you can refer to our **[API reference documentation](https://api.consoleconnect.com/docs/tag/Companies)**.\n\n### Prerequisite\n\nThe following requirements must be met to perform the provided code samples.\n\n1. API Key - Contact the Console Connect Support team to request for an API Key Email: **[support@consoleconnect.com](mailto:support@consoleconnect.com)**\n\n2. Access Rights - User must have role: Network Admin/NETWORKCONTROL. You may verify your role **[here](https://app.consoleconnect.com/settings/members)**.\n\n3. Acceptance of Agreement - API users must sign the Specific Terms for API Use.\n\n4. Your company has been verified on the Console Connect platform.\n\n# I. Prerequisite Procedures\n\nSimilar series of steps to perform to obtain the relevant data required for Company APIs.\n\n## I.I. Acquiring user details\n\nThe user ID, company ID, and company username is obtained upon execution of API GET /api/auth/token. This provides information to the currently authenticated user.\n\n```bash\n\ncurl -X GET https://api.consoleconnect.com/api/auth/token\\\n -H \"Authorization: Bearer \"\n\n```\n\nIf the request was successful, it will respond with a JSON object similar to this:\n\n```json\n{\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"companies\": [\n {\n \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"name\": \"Demo\",\n \"username\": \"demo\",\n /* other properties... */,\n }\n ],\n /* other properties... */\n}\n```\n\n\n> **Note:**\n>\n> Take note of your **user id** (`id`), **company id** (`companies[0].id`), and **company username** (`companies[0].username`).\n\n# II. Create Company\n> **Note:**\n>\n> This section assumes you do not already have a company associated with your account. There is a limit of one company per account.\n\nCompose the API request:\n\n```bash\ncurl --request PUT \\\n--url https://api.consoleconnect.com/api/company \\\n--header 'Authorization: Bearer ' \\\n--data '{\n\"name\": \"Test International\",\n\"businessRegistrationNumber\": \"EXAMPLE-252\",\n\"company\": {\n \"addresses\": [\n {\n \"primary\": true,\n \"country\": \"US\",\n \"address\": \"17 Anywhere Pl\",\n \"city\": \"Test City\",\n \"state\": \"OH\",\n \"zip\": \"44101\"\n }\n ],\n \"emailDomains\": [\n \"test.com\"\n ],\n \"businessType\": \"Data Center\"\n }\n}'\n```\n\n> **Note:**\n>\n> Once you have provisioned a new company you need to submit your Business Registration document to the Console Support team at support@consoleconnect.com for internal verification, this can take a few days to complete. If you prefer to pay by invoice on your services that you order, you will need to request from the Console Support team to enable Invoice payments. We will have to perform a credit assessment on your company to confirm your company qualifies for invoice payments.\n\n\n
\n\nIf the request was successful, it will respond with a JSON object similar to this:\n\n```json\n{\n \"username\": \"testinternational\",\n \"name\": \"Test International\",\n \"type\": \"COMPANY\",\n \"overviewImage\": null,\n \"categories\": [],\n \"company\": {\n \"emailDomains\": [\n \"test.com\"\n ],\n \"businessType\": \"Data Center\",\n \"addresses\": [\n {\n \"primary\": true,\n \"country\": \"US\",\n \"address\": \"17 Anywhere Pl\",\n \"city\": \"Test City\",\n \"state\": \"OH\",\n \"zip\": \"44101\"\n }\n ],\n \"privacy\":{\n \"network\": {\n \"mode\": \"PRIVATE\"\n },\n \"community\": {\n \"mode\": \"PRIVATE\"\n }\n },\n \"businessDevelopmentManagerTypePreference\": \"UNSPECIFIED\"\n },\n \"portsActive\": 0,\n \"portsPending\": 0,\n \"portsDisabled\": 0,\n \"businessRegistrationNumber\": \"EXAMPLE-252\",\n \"id\": \"66bddeef730c30c4c526c679\",\n \"bundleCrossConnectChargeId\": null,\n \"deletedAt\": null,\n \"registered\": {}, \"tags\": [],\n \"createdAt\": \"2024-08-13T08:48:48.006Z\",\n \"online\": false,\n \"isFollowing\": false,\n \"isFollowee\": false,\n \"companies\": [],\n \"linkUserCompany\": {},\n \"token\": null\n}\n```\n\n
\n\n# III. Invite a user to a company\n\nThis section is a detailed guideline for inviting a user to your company.\n\n> **Note:**\n>\n> This section requires the parameter `companyName`, which can be retrieved as shown in `I.I. Acquiring user details`.\n\nCompose the API request:\n\n```bash\ncurl --request PUT \\\n--url https://api.consoleconnect.com/api/membership-requests/:companyName/invite \\\n--header 'Authorization: Bearer ' \\\n--data '{\n \"invites\": [\n {\n \"email\": \"sample.email@example.com\"\n }\n ]\n}'\n```\n\nMake sure to replace `:companyName` with your actual company username and `` with your API key.\n\nIf the request was successful, You should receive a **statusCode**: `200` and an empty JSON object similar to this:\n\n```json\n{}\n```\n\n# IV. List users from your company\n\nThis section is a detailed guideline for getting the list of members/users of your company.\n\n> **Note:**\n>\n> This section requires the parameter `companyId`, which can be retrieved as shown in `I.I. Acquiring user details`.\n\nCompose the API request:\n\n\n```bash\ncurl --request GET \\\n--url https://api.consoleconnect.com/v2/companies/:companyId/members \\\n--header 'Authorization: Bearer '\n```\n\nMake sure to replace `:companyId` with your actual company id and `` with your API key.\n\n
\n\nIf the request was successful, it will respond with a JSON object similar to this:\n\n```json\n{\n [\n {\n \"id\": \"67777c03df20b3fb0a08911a\",\n \"createdAt\": \"2017-11-21T00:43:36.681Z\",\n \"username\": \"sampleusername\",\n \"stats\": {\n \"members\": 0,\n \"interconnections\": 0,\n \"followers\": 5,\n \"following\": 3,\n \"privateArticles\": 0,\n \"privateEvents\": 0,\n \"privatePosts\": 0,\n \"articles\": 0,\n \"events\": 0,\n \"posts\": 5\n },\n \"tags\": [],\n \"location\": null,\n \"summary\": null,\n \"headline\": \"SE\",\n \"background\": \"\",\n \"avatarId\": \"67777c48e16f77d35595c729\",\n \"avatar\": null,\n \"email\": \"sample@email.com\",\n \"name\": \"Sample Name\",\n \"roles\": [\n {\n \"name\": \"USER\",\n \"display\": \"Company Member\",\n \"icon\": \"user outline\",\n \"keyholder\": false,\n \"visible\": true,\n \"shieldOnly\": false,\n \"systemDefault\": false,\n \"unauthenticatedSystemDefault\": false,\n \"id\": \"67777c9420212e7f2c5c18f6\",\n \"deletedAt\": null,\n \"displayOrder\": \"300\",\n \"description\": \"A Member is associated with your company but may not edit company profile information or view company network information\",\n \"tags\": [\n \"Prod\"\n ],\n \"createdAt\": \"2015-09-03T06:48:40.377Z\",\n \"updatedAt\": \"2024-10-23T10:45:31.906Z\",\n ...\n },\n {\n \"name\": \"NETWORKCONTROL\",\n \"display\": \"Network Admin\",\n \"icon\": \"flow switch\",\n \"keyholder\": false,\n \"visible\": true,\n \"shieldOnly\": false,\n \"systemDefault\": false,\n \"unauthenticatedSystemDefault\": false,\n \"id\": \"67777c9ed46eeebfa8f2d90c\",\n \"deletedAt\": null,\n \"displayOrder\": \"-299\",\n \"description\": \"A Network Admin may create, edit, remove, and otherwise manage all of your company's ports, connections and virtual routers\",\n \"tags\": [\n \"networkadmin\",\n \"Prod\"\n ],\n \"createdAt\": \"2015-09-30T04:00:00.000Z\",\n \"updatedAt\": \"2024-12-18T02:11:02.999Z\",\n ...\n }\n ]\n },\n ... //other user data\n ],\n \"isFollowing\": false,\n \"joinedDate\": \"2020-03-02T21:00:05.390Z\"\n}\n```\n\n
\n\n# V. Add role to a user\n\nThis section is a detailed guideline on adding a role to a member/user of your company.\n> **Note:**\n>\n> This section requires the parameter `companyName`, which can be retrieved as shown in `I.I. Acquiring user details`.\n\nCompose the API request:\n\n```bash\ncurl --request PUT \\\n--url https://api.consoleconnect.com/api/company/:companyName/memberships/:targetUsername/roles/:roleName \\\n--header 'Authorization: Bearer '\n```\n\nMake sure to replace `` with your API key, `:targetUsername` with the user name of your target user and `:roleName` with the name of the role you want to add to the user.\n\nList of role names:\n* NETWORKCONTROL - Network Admin\n* USER - Company Member\n* Content Admin - Content Admin\n* NETWORKVIEW - Network Viewer\n* ADMIN - User Admin\n\n
\n\nIf the request was successful, it will respond with a JSON object similar to this:\n\n```json\n{\n \"name\": \"NETWORKCONTROL\",\n \"display\": \"Network Admin\",\n \"icon\": \"flow switch\",\n \"keyholder\": false,\n \"visible\": true,\n \"shieldOnly\": false,\n \"systemDefault\": false,\n \"unauthenticatedSystemDefault\": false,\n \"id\": \"66bde191444fcbc2fb7359be\",\n \"deletedAt\": null,\n \"displayOrder\": \"-299\",\n \"description\": \"A Network Admin may create, edit, remove, and otherwise manage all of your company's ports, connections and virtual routers\",\n \"tags\": [\n \"networkadmin\",\n \"Prod\"\n ],\n \"createdAt\": \"2015-09-30T04:00:00.000Z\",\n \"updatedAt\": \"2024-08-12T06:44:14.616Z\",\n \"policyIds\": [...\n ],\n \"deleted\": false,\n \"permissions\": {\n \"company-actions\": false,\n \"company-update\": false,\n \"connection-create\": true,\n \"connection-delete\": true,\n \"connection-modify\": true,\n \"connection-read\": true,\n \"order-create\": true,\n \"order-delete\": true,\n \"order-modify\": true,\n \"order-query\": true,\n \"ports-edit\": true,\n \"ports-read\": true,\n \"user-moderation\": false\n },\n \"queryable\": true,\n \"permissionIds\": [...\n ],\n \"companyIds\": [],\n \"readonly\": false,\n \"policies\": [...\n ]\n}\n```\n\n
\n\n# VI. Remove a user from a company\n\nThis section is a detailed guideline on removing a member/user to your company.\n> **Note:**\n>\n> This section requires the parameter `companyName`, which can be retrieved as shown in `I.I. Acquiring user details`.\n\nAdditional prerequisite:\nYour account must have a role of **Account Administrator/ADMIN** for the company.\n\nCompose the API request:\n\n```bash\ncurl --request DELETE \\\n--url https://api.test.consoleconnect.com/api/company/:companyName/memberships/:targetUsername \\\n--header 'Authorization: Bearer '\n}'\n```\n\nMake sure to replace `` with your API key and `:targetUsername` with the user name of your target user and `:companyName` with your actual company username.\n\nIf the request was successful, You should receive a **statusCode**: `200` and an empty JSON object similar to this:\n\n```json\n{}\n```\n", + "x-displayName": "Manage Company" + }, + { + "name": "API Specification", + "description": "Api Specs Section" + }, + { + "name": "Auth", + "description": "User authentication is required before most API calls can be made.\n\n## API Key\n\nAPI Keys are provisioned by Support and applied to your Console Connect User Account. Email [Support](mailto:support@consoleconnect.com) to request a key.\n\nHere is an example request using an API Key:\n\n```\ncurl -X GET https://api.consoleconnect.com/api/company/exampleCo/ports \\\n-H \"Authorization: Bearer [[api key]]\"\n```\n" + }, + { + "name": "Agreements", + "description": "\nYou must agree to the *Specific Terms for API Use* before using the Console Connect API.\nIf you are using the [Console Connect](https://app.consoleconnect.com) web application, you must also agree to the Console Connect Terms of Service.\nTo view agreement information via API, you will need your companyId, which can be retrieved through the [Company API](#tag/Company)." + }, + { + "name": "Search", + "description": "Search for users, companies, and data center facilities." + }, + { + "name": "Pricing", + "description": "Look up pricing" + }, + { + "name": "Metros", + "description": "Metros are the locations of DCFs on the Console Connect platform. These endpoints can be used to search for places where companies have active ports available for Layer 2 Connections." + }, + { + "name": "Data Center Facilities (DCFs)", + "description": "Data Center Facilities (DCFs) are the hosts of Ports on the Console Connect platform. They support a range of Speeds (1Gb, 10Gb, 1000Gb) in various locations across the globe.\nThe endpoints and examples listed in this section will help you find the right DCF for your needs." + }, + { + "name": "Port Orders", + "description": "Ordering a port" + }, + { + "name": "Ports", + "description": "Before configuring any network services in Console Connect, you must create a port. This is a two-step process; ordering or requesting a port, then activating that port.\nConsole Connect manages entitlements through plan-based subscriptions associated with each port (one subscription per port). Before you can order a port, your company must have a subscription to a plan with sufficient entitlements available to complete the request. To list your company’s subscriptions and entitlements refer to [Get all plans and entitlements](#network-ports-all-plans-&-entitlements-get)." + }, + { + "name": "Edge Ports", + "description": "Before configuring any network services in Console Connect, you must create a port. This is a two-step process; ordering or requesting a port, then activating that port.\nThe price with all vendor details is returned and stored in the edgePayload. The difference between Edge and non-Edge order/port is that there is edgePayload present and the flag is set to isEdgePort=true. The collections in MongoDb for both are the same." + }, + { + "name": "Layer 2 Connections", + "description": "Once a port is active, you can provision a connection on it. You can create Layer 2 Connections between your port and another port belonging to your company (self-to-self), to a port belonging to another company (B2B), or to a DCP port.\n\nConnections can be in one of the following states:\n\nStatus | Description\n--:| ----\nPENDING | The connection request is pending approval from at least one party.\nCANCELLED | The request was cancelled by the source/requestor.\nPENDING ACCEPTANCE | Pending acceptance by 3rd party service (e.g. AWS).\nDENIED | The request was rejected by the target.\nACCEPTED | The request was accepted by the target, but the physical port has not yet come up.\nACTIVE | The connection is Active and operational.\nDISABLED | The connection has been explicitly disabled.\nDELETING | The connection is in the process of being deleted.\nDELETED | The connection has been deleted.\nMANUAL | The connection is being manually provisioned.\nERROR | The connection is in an error state. Refer to connection.errorReason for more information." + }, + { + "name": "Alibaba Cloud", + "description": "This guide will show you how to provision a Layer 2 connection to Alibaba Cloud using the Console Connect API.\n\n## Choose source port\n\n**Request**\n\n```bash\ncurl 'https://api.consoleconnect.com/api/company/:companyUsername/ports?deleted=false' \\\n--header 'authorization: Bearer '\n```\n\n**Make sure to replace `:companyUsername` with your actual company username and `` with your API key.**\n\n**Response**\n\nYou may receive multiple results, but only choose one.\n\nTake note of the *id* property - we will use this as the `srcPortId`.\n\n```json\n{\n \"results\": [\n {\n \"dcpCompanyId\": null,\n \"name\": \"Demo Self Port 1\",\n \"speed\": {\n \"value\": 1000,\n \"name\": \"1000 Mbps\"\n },\n \"speedOverprovisioningFactor\": 1,\n \"singleService\": false,\n \"tags\": [],\n \"locationId\": null,\n \"dataCenterFacilityId\": \"5af90d4548ba7200120a194b\",\n \"popId\": \"9424e0a3-3793-410b-8871-fb2a76bdc767\",\n \"metroId\": \"5afa74accf15620012b981d6\",\n \"status\": \"ACTIVE\",\n \"serviceStatus\": \"OPEN\",\n \"linkState\": \"UP\",\n \"linkStateUpSince\": null,\n \"linkStateSyncedAt\": \"2024-12-11T08:24:01.791Z\",\n \"type\": \"PHYSICAL\",\n \"mediaType\": \"SMF\",\n \"activeChangedAt\": \"2024-12-11T08:24:01.926Z\",\n \"firstActiveAt\": \"2024-12-11T08:24:01.822Z\",\n \"updatedAt\": \"2024-12-11T08:23:54.455Z\",\n \"createdAt\": \"2024-12-11T08:23:54.455Z\",\n \"deleted\": false,\n \"deletedAt\": null,\n \"salesRecordId\": \"254395\",\n \"paymentType\": \"invoice\",\n \"payg\": true,\n \"id\": \"5db8568f129558000b8d08c6\", // This property will be the srcPortId of the request payload\n \"accessCircuit\": {},\n \"companyId\": \"5d4d056242fbd3000ab4c01d\",\n \"crossConnectId\": null,\n \"capacity\": { ...\n },\n \"company\": { ...\n },\n \"dataCenterFacility\": { ...\n },\n \"connections\": [],\n \"metro\": { ...\n },\n ...\n },\n ...\n ]\n}\n```\n\n## Find an available Alibaba NNI\n\n### Choosing destination port\n\n**Request**\n\n```bash\ncurl 'https://api.consoleconnect.com/api/directConnectPartner/alibaba_cloud/regions' \\\n--header 'Authorization: Bearer ' \n```\n\n**Make sure to replace `` with your API key.**\n\n**Response**\n\nYou will receive multiple results. Choose two ports, one for your primary connection to Google Cloud and another for your secondary, just make sure your selection is in the same location, you can confirm this with the Metro ID.\n\nTake note of the `id` property - we will use this as the `destPortId`\n\n```json\n{\n \"results\": [\n {\n \"dcpCompanyId\": null,\n \"deviceId\": \"e9cecc5a-5be3-4234-a189-23c8a45b685c\",\n \"name\": \"Sydney (Australia) - A\", // You need to search a matching pair for Primary\n \"speed\": 10000,\n \"speedOverprovisioningFactor\": 1,\n \"singleService\": false,\n \"tags\": [],\n \"locationId\": null,\n \"dataCenterFacilityId\": \"5a98b176339bad0012edd0a2\",\n \"popId\": null,\n \"metroId\": \"a5b8a5791a43059a05d9052d\", // The metroId should match on both the primary & secondary NNI\n \"status\": \"ACTIVE\",\n \"serviceStatus\": \"OPEN\",\n ...\n \"id\": \"616f93f6f477db001536cf4d\", // This is the Primary destination port ID\n \"companyId\": \"5bb599948f3862000a43dabe\",\n ...\n },\n {\n \"dcpCompanyId\": null,\n \"deviceId\": \"c3f0b83f-443e-497b-826f-ccc7fcaacb37\",\n \"name\": \"Sydney (Australia) - B\", // You need to search a matching pair for Secondary\n \"speed\": 10000,\n \"speedOverprovisioningFactor\": 1,\n \"singleService\": false,\n \"tags\": [],\n \"locationId\": null,\n \"dataCenterFacilityId\": \"5ae7f99d3bd197001240f569\",\n \"popId\": null,\n \"metroId\": \"a5b8a5791a43059a05d9052d\", // The metroId should match on both the primary & secondary NNI\n \"status\": \"ACTIVE\",\n \"serviceStatus\": \"OPEN\",\n ...\n \"id\": \"616f94b604463800167bcdcb\", // This is the Secondary destination port ID\n \"companyId\": \"5bb599948f3862000a43dabe\",\n ...\n ]\n }\n}\n```\n" + }, + { + "name": "Anti-DDoS", + "description": "Use this API to create, list, update or delete Anti-DDoS orders for the Console Security application." + }, + { + "name": "AWS Direct Connect", + "description": "Use the generic connection Create, Read, Update and Delete (CRUD) routes for searching, updating and deleting Layer 2 AWS Direct Connect Partner connections." + }, + { + "name": "Oracle FastConnect", + "description": "Connection to Oracle FastConnect is currently the same as a Business to Business Layer 2 connection. You need to provision the service to the Oracle company on Console Connect then our Support team will receive your request and complete the provisioning on Console Connect for you. You will have to send your Oracle OCID to Support so that they can complete the provisioning in Oracle for you.\n\n## Choose source port\n\n**Request**\n\n```bash\ncurl 'https://api.consoleconnect.com/api/company/:companyUsername/ports?deleted=false' \\\n--header 'Authorization: Bearer ' \n```\n\n**Make sure to replace `:companyUsername` with your actual company username and `` with your API key.**\n\n**Response**\n\nYou may receive multiple results, but only choose one.\n\nTake note of the *id* property - we will use this as the `portId`.\n\n```json\n{\n \"results\": [\n {\n \"id\": \"66c29b3c6dcad34e5b728c9c\", // This property will be the portId of the request payload\n \"name\": \"My-Port-1\",\n \"speed\": {\n \"value\": 1000,\n \"name\": \"1000 Mbps\"\n },\n \"tags\": [],\n \"dataCenterFacilityId\": \"5aa89b04ac86ba0012345bdf\",\n \"popId\": \"99759532-0aeb-4e02-a876-5b505e9b213a\",\n \"metroId\": \"77d9f1fbbcaa906f3cddb6d1\",\n \"companyId\": \"5d4d056242fbd3000ab4c01d\",\n \"status\": \"ACTIVE\",\n \"updatedAt\": \"2024-08-19T01:09:16.376Z\",\n \"createdAt\": \"2024-08-19T01:09:16.376Z\",\n \"deleted\": false,\n \"deletedAt\": null,\n \"paymentType\": \"invoice\",\n \"payg\": true\n ...\n }\n ...\n ]\n}\n```\n\n## Find an available Oracle NNI\n\n### Choose destination metro\n\n**Request**\n\n```bash\ncurl 'https://api.consoleconnect.com/api/company/oracle/metro/capabilities' \\\n--header 'Authorization: Bearer '\n```\n\n**Make sure to replace `` with your API key.**\n\n**Response**\n\nYou may receive multiple results, but only choose the location you wish to connect to.\n\nTake note of the *id* property since we will use this as the `destMetroId` and *firstDataCenterFacilityIdInMetro* as the `destDcf`.\n\n```json\n{\n \"results\": [\n {\n \"name\": \"Hong Kong\",\n \"code\": \"HKG\",\n \"logo\": null,\n \"canCreateController\": false,\n \"tags\": [],\n \"description\": \"\",\n \"country\": \"hk\",\n \"rir\": \"APNIC\",\n \"regionIds\": [\n \"5c05cb06cad910000ae251f4\"\n ],\n \"ready\": true,\n \"id\": \"77d9f1fbbcaa906f3cddb6d1\", // This property will be the destMetroId of the request payload\n \"deletedAt\": null,\n \"createdAt\": \"2017-12-18T00:45:44.120Z\",\n \"updatedAt\": \"2024-02-25T05:02:47.267Z\",\n \"deleted\": false,\n \"capabilities\": {\n \"layer2\": true\n },\n \"firstDataCenterFacilityIdInMetro\": \"5aa89b04ac86ba0012345bdf\" // This property will be the destDcf of the request payload\n }\n ]\n}\n```\n" + }, + { + "name": "Tencent Cloud", + "description": "Connections to Tencent Cloud on Console Connect currently work in the same way as a business-to-business Layer 2 connection. First, you provision the service to the Tencent company on Console Connect, then our Support team will complete the provisioning on Console Connect for you. Then you can complete the Tencent provisioning in the Tencent portal with information that the Support team will supply, such as the Provider Account ID, Shared Connection ID and the VLAN ID between Console Connect and Tencent Cloud.\n\n## Choose source port\n\n**Request**\n\n```bash\ncurl 'https://api.consoleconnect.com/api/company/:companyUsername/ports?deleted=false' \\\n--header 'Authorization: Bearer ' \n```\n\n**Make sure to replace `:companyUsername` with your actual company username and `` with your API key.**\n\n**Response**\n\nYou may receive multiple results, but only choose one.\n\nTake note of the *id* property - we will use this as the `portId`.\n\n```json\n{\n \"results\": [\n {\n \"id\": \"66c29b3c6dcad34e5b728c9c\", // This property will be the portId of the request payload\n \"name\": \"My-Port-1\",\n \"speed\": {\n \"value\": 1000,\n \"name\": \"1000 Mbps\"\n },\n \"tags\": [],\n \"dataCenterFacilityId\": \"5aa89b04ac86ba0012345bdf\",\n \"popId\": \"99759532-0aeb-4e02-a876-5b505e9b213a\",\n \"metroId\": \"77d9f1fbbcaa906f3cddb6d1\",\n \"companyId\": \"5d4d056242fbd3000ab4c01d\",\n \"status\": \"ACTIVE\",\n \"updatedAt\": \"2024-08-19T01:09:16.376Z\",\n \"createdAt\": \"2024-08-19T01:09:16.376Z\",\n \"deleted\": false,\n \"deletedAt\": null,\n \"paymentType\": \"invoice\",\n \"payg\": true\n ...\n }\n ...\n ]\n}\n```\n\n## Find an available Tencent NNI\n\n### Choose destination metro\n\n**Request**\n\n```bash\ncurl 'https://api.consoleconnect.com/api/company/tencent-cloud/metro/capabilities' \\\n--header 'Authorization: Bearer '\n```\n\n**Make sure to replace `` with your API key.**\n\n**Response**\n\nYou may receive multiple results, but only choose the location you wish to connect to.\n\nTake note of the *id* property since we will use this as the `destMetroId` and *firstDataCenterFacilityIdInMetro* as the `destDcf`.\n\n```json\n{\n \"results\": [\n {\n \"name\": \"Hong Kong\",\n \"code\": \"HKG\",\n \"logo\": null,\n \"canCreateController\": false,\n \"tags\": [],\n \"description\": \"\",\n \"country\": \"hk\",\n \"rir\": \"APNIC\",\n \"regionIds\": [\n \"5c05cb06cad910000ae251f4\"\n ],\n \"ready\": true,\n \"id\": \"77d9f1fbbcaa906f3cddb6d1\", // This property will be the destMetroId of the request payload\n \"deletedAt\": null,\n \"createdAt\": \"2017-12-18T00:45:44.120Z\",\n \"updatedAt\": \"2024-02-25T05:02:47.267Z\",\n \"deleted\": false,\n \"capabilities\": {\n \"layer2\": true\n },\n \"firstDataCenterFacilityIdInMetro\": \"5aa89b04ac86ba0012345bdf\" // This property will be the destDcf of the request payload\n }\n ]\n}\n```\n" + }, + { + "name": "Vultr Cloud", + "description": "Layer 2 connections to Vultr Cloud currently work in the same way as a business-to-business Layer 2 connection.\nFirst, you will need to provision the connection to the Vultr company on Console Connect, then our Support team will complete the provisioning for you.\nNext, send your Vultr account email address to [support@consoleconnect.com](mailto:support@consoleconnect.com). See the following video for more information: \nhttps://www.consoleconnect.com/clouds/connect-to-vultr-cloud/#Connectivity-model\n\n## Choose source port\n\n**Request**\n\n```bash\ncurl 'https://api.consoleconnect.com/api/company/:companyUsername/ports?deleted=false' \\\n--header 'Authorization: Bearer ' \n```\n\n**Make sure to replace `:companyUsername` with your actual company username and `` with your API key.**\n\n**Response**\n\nYou may receive multiple results, but only choose one.\n\nTake note of the *id* property - we will use this as the `portId`.\n\n```json\n{\n \"results\": [\n {\n \"id\": \"66c29b3c6dcad34e5b728c9c\", // This property will be the portId of the request payload\n \"name\": \"My-Port-1\",\n \"speed\": {\n \"value\": 1000,\n \"name\": \"1000 Mbps\"\n },\n \"tags\": [],\n \"dataCenterFacilityId\": \"5aa89b04ac86ba0012345bdf\",\n \"popId\": \"99759532-0aeb-4e02-a876-5b505e9b213a\",\n \"metroId\": \"77d9f1fbbcaa906f3cddb6d1\",\n \"companyId\": \"5d4d056242fbd3000ab4c01d\",\n \"status\": \"ACTIVE\",\n \"updatedAt\": \"2024-08-19T01:09:16.376Z\",\n \"createdAt\": \"2024-08-19T01:09:16.376Z\",\n \"deleted\": false,\n \"deletedAt\": null,\n \"paymentType\": \"invoice\",\n \"payg\": true\n ...\n }\n ...\n ]\n}\n```\n\n## Find an available Vultr NNI\n\n### Choose destination metro\n\n**Request**\n\n```bash\ncurl 'https://api.consoleconnect.com/api/company/vultrcloud/metro/capabilities' \\\n--header 'Authorization: Bearer '\n```\n\n**Make sure to replace `` with your API key.**\n\n**Response**\n\nYou may receive multiple results, but only choose the location you wish to connect to.\n\nTake note of the *id* property since we will use this as the `destMetroId` and *firstDataCenterFacilityIdInMetro* as the `destDcf`.\n\n```json\n{\n \"results\": [\n {\n \"name\": \"Hong Kong\",\n \"code\": \"HKG\",\n \"logo\": null,\n \"canCreateController\": false,\n \"tags\": [],\n \"description\": \"\",\n \"country\": \"hk\",\n \"rir\": \"APNIC\",\n \"regionIds\": [\n \"5c05cb06cad910000ae251f4\"\n ],\n \"ready\": true,\n \"id\": \"77d9f1fbbcaa906f3cddb6d1\", // This property will be the destMetroId of the request payload\n \"deletedAt\": null,\n \"createdAt\": \"2017-12-18T00:45:44.120Z\",\n \"updatedAt\": \"2024-02-25T05:02:47.267Z\",\n \"deleted\": false,\n \"capabilities\": {\n \"layer2\": true\n },\n \"firstDataCenterFacilityIdInMetro\": \"5aa89b04ac86ba0012345bdf\" // This property will be the destDcf of the request payload\n }\n ]\n}\n```\n" + }, + { + "name": "Huawei Cloud", + "description": "Connections to Huawei Cloud on Console Connect currently work in the same way as a business-to-business Layer 2 connection.\nFirst, you provision the service to the Huawei company on Console Connect, then provide your Huawei Project ID to our Support team, \nwho will complete the provisioning on both the Console Connect and Huawei ends for you.\n\n## Choose source port\n\n**Request**\n\n```bash\ncurl 'https://api.consoleconnect.com/api/company/:companyUsername/ports?deleted=false' \\\n--header 'Authorization: Bearer ' \n```\n\n**Make sure to replace `:companyUsername` with your actual company username and `` with your API key.**\n\n**Response**\n\nYou may receive multiple results, but only choose one.\n\nTake note of the *id* property - we will use this as the `portId`.\n\n```json\n{\n \"results\": [\n {\n \"id\": \"66c29b3c6dcad34e5b728c9c\", // This property will be the portId of the request payload\n \"name\": \"My-Port-1\",\n \"speed\": {\n \"value\": 1000,\n \"name\": \"1000 Mbps\"\n },\n \"tags\": [],\n \"dataCenterFacilityId\": \"5aa89b04ac86ba0012345bdf\",\n \"popId\": \"99759532-0aeb-4e02-a876-5b505e9b213a\",\n \"metroId\": \"77d9f1fbbcaa906f3cddb6d1\",\n \"companyId\": \"5d4d056242fbd3000ab4c01d\",\n \"status\": \"ACTIVE\",\n \"updatedAt\": \"2024-08-19T01:09:16.376Z\",\n \"createdAt\": \"2024-08-19T01:09:16.376Z\",\n \"deleted\": false,\n \"deletedAt\": null,\n \"paymentType\": \"invoice\",\n \"payg\": true\n ...\n }\n ...\n ]\n}\n```\n\n## Find an available Huawei NNI\n\n### Choose destination metro\n\n**Request**\n\n```bash\ncurl 'https://api.consoleconnect.com/api/company/huaweicloud/metro/capabilities' \\\n--header 'Authorization: Bearer '\n```\n\n**Make sure to replace `` with your API key.**\n\n**Response**\n\nYou may receive multiple results, but only choose the location you wish to connect to.\n\nTake note of the *id* property since we will use this as the `destMetroId` and *firstDataCenterFacilityIdInMetro* as the `destDcf`.\n\n```json\n{\n \"results\": [\n {\n \"name\": \"Hong Kong\",\n \"code\": \"HKG\",\n \"logo\": null,\n \"canCreateController\": false,\n \"tags\": [],\n \"description\": \"\",\n \"country\": \"hk\",\n \"rir\": \"APNIC\",\n \"regionIds\": [\n \"5c05cb06cad910000ae251f4\"\n ],\n \"ready\": true,\n \"id\": \"77d9f1fbbcaa906f3cddb6d1\", // This property will be the destMetroId of the request payload\n \"deletedAt\": null,\n \"createdAt\": \"2017-12-18T00:45:44.120Z\",\n \"updatedAt\": \"2024-02-25T05:02:47.267Z\",\n \"deleted\": false,\n \"capabilities\": {\n \"layer2\": true\n },\n \"firstDataCenterFacilityIdInMetro\": \"5aa89b04ac86ba0012345bdf\" // This property will be the destDcf of the request payload\n }\n ]\n}\n```\n" + }, + { + "name": "Azure ExpressRoute", + "description": "To create an Azure connection, you will need to:\n1. In the Microsoft Azure portal you will need to generate a new S-Key in the ExpressRoute service.\n2. Use the [Create an Azure Direct Connect Partner.\nconnection](#network-azure-expressroute-create-azure-connection) endpoint\nto create a connection request in Console Connect using the service key\nfrom Azure.\n * The connection group will be created and the status will be `CREATING`.\n * After connection creation is completed, the status will become `ACTIVE`.\n3. [Configure your peering\ninformation](#network-azure-expressroute-azure-connection-peering-config)\n\n#### Provisioning Statuses\nThere are several sub-statuses available for Azure connections, which can be\nfound\nin the `connection.partner.peering` field. These statuses are listed in\nthe\nfollowing table.\n\nProvisioning Status | Description\n--:| ----\nNOT PROVISIONED | Not yet provisioned.\nPROVISIONING | In the process of provisioning with Azure.\nPROVISIONED | Connection is active & ready to use.\nDEPROVISIONING | In the process of deprovisioning with Azure." + }, + { + "name": "Google Cloud Engine", + "description": "Use the generic connection Create, Read, Update and Delete (CRUD) routes for searching, updating and deleting Layer 2 Google Cloud Engine Direct Connect Partner connections." + }, + { + "name": "IBM Cloud Direct Link", + "description": "\nManage Layer 2 IBM Cloud Direct Link Connections.\n\nUse the generic connection Create, Read, Update and Delete (CRUD) routes for searching, updating and deleting Layer 2 IBM Cloud Direct Link connections." + }, + { + "name": "OVHCloud", + "description": "- This guide will show how to connect to OVHcloud using the Console Connect API.\n- For further information you can refer to our [API reference documentation](https://api.consoleconnect.com/docs/).\n- **Prerequisites**:\n * Your Service Key (partnerAccountId) is validated with OVHcloud. You will need to order a new OVHcloud Connect service to receive a Service Key.\n * For more information, please see our [OVHcloud connectivity video](https://www.consoleconnect.com/clouds/connect-to-ovhcloud/#Howto).\n * Your company has been verified on the Console Connect platform.\n * Your user account should have the [Network Admin](https://www.consoleconnect.com/help/account-management/#roles-permissions) role.\n\n## Choose source port\n\n**Request**\n\n```bash\ncurl 'https://api.consoleconnect.com/api/company/:companyUsername/ports?deleted=false' \\\n--header 'Authorization: Bearer '\n```\n**Make sure to replace `:companyUsername` with your actual company username and `` with your API key.**\n\n**Response**\n\nYou may receive multiple results, but only choose one.\n\nTake note of the *id* property - we will use this as the `portId`.\n\n```json\n{\n \"results\": [\n {\n \"id\": \"66c29b3c6dcad34e5b728c9c\", // This property will be the portId of the request payload\n \"name\": \"My-Port-1\",\n \"speed\": {\n \"value\": 1000,\n \"name\": \"1000 Mbps\"\n },\n \"tags\": [],\n \"dataCenterFacilityId\": \"5aa89b04ac86ba0012345bdf\",\n \"popId\": \"99759532-0aeb-4e02-a876-5b505e9b213a\",\n \"metroId\": \"77d9f1fbbcaa906f3cddb6d1\",\n \"companyId\": \"5d4d056242fbd3000ab4c01d\",\n \"status\": \"ACTIVE\",\n \"updatedAt\": \"2024-08-19T01:09:16.376Z\",\n \"createdAt\": \"2024-08-19T01:09:16.376Z\",\n \"deleted\": false,\n \"deletedAt\": null,\n \"paymentType\": \"invoice\",\n \"payg\": true\n ...\n }\n ...\n ]\n}\n```\n\n## Find an available OVH NNI\n\n### Choose destination port\n\n**Note:** You can use **[the validate OVH key endpoint](/#tag/OVHCloud/operation/validate-ovh-service-key)** to retrieve the destPortId.\n\n**Request**\n\n```bash\ncurl 'https://api.consoleconnect.com/v2/ovh-service-key/validate' \\\n--header 'Authorization: Bearer ' \\\n--data-raw '{\"serviceKey\":\"\"}'\n```\n\n**Make sure to replace `` with your API key.**\n\n**Response**\n\nTake note of the *portId* property since we will use this as the `destPortId` in request.\n\n```json\n{\n \"bandwidth\": 2000,\n \"region\": \"par-01\",\n \"portId\": \"645c8f1b6ae4e90015d8f53b\", // This property will be the destPortId of the request payload\n \"bandwidthTiers\": [\n {\n \"type\": \"AUTOMATIC\",\n \"value\": 200\n },\n {\n \"value\": 500,\n \"type\": \"AUTOMATIC\"\n },\n {\n \"value\": 1000,\n \"type\": \"AUTOMATIC\"\n },\n {\n \"value\": 2000,\n \"type\": \"AUTOMATIC\"\n }\n ],\n \"portName\": \"OVH Paris\",\n \"dataCenterFacilityId\": \"5a8ba8c58195000012e9f13f\"\n}\n```\n", + "x-internal": false + }, + { + "name": "Internet On-Demand (IO-D)", + "description": "\n## Prerequisites\nBefore you can get started working with IO-D, please ensure:\n* Your company has been verified on the Console Connect platform\n* The authenticated user account has IO-D Create permissions\n* A port with IO-D capability has been specified\n> **Note:** checkout the **[IO-D guideline](/tag/Getting-Started#section/Internet-On-Demand)** for more guidelines & tips related to IO-D.\n## Path Routes\nThe IO-D API endpoints reference `GIA`. Global Internet Access (GIA) was the internal Console Connect product name for Internet On-Demand (IO-D).\nThe IO-D endpoints are nested under the `/app-user/{companyId}` path with *two different roots*. One is singular (`gia-service`) and the other is plural (`gia-services`). These paths are associated with the following actions:\n\n|Root Path|Actions|\n|---------|---------|\n|`/app-user/{companyId}/gia-service`|Create, Flex, Logs|\n|`/app-user/{companyId}/gia-services`|Search/List, Get by ID|" + }, + { + "name": "ASNs", + "description": "*ASN statuses include:*\n\n * UNVERIFIED - The initial state of a newly added ASN. The ASN will then be verified by Console Connect Support.\n\n * VERIFIED - This ASN is correct, as verified by Console Connect Support." + }, + { + "name": "CloudRouter", + "description": "CloudRouter / L3VPN operations." + }, + { + "name": "Entitlements", + "description": "Check entitlements for network actions." + }, + { + "name": "Companies", + "description": "Manage Company business and network information." + }, + { + "name": "Users", + "description": "Manage individual user accounts." + }, + { + "name": "Support Tickets", + "description": "Create and view tickets for the Console Connect Support team." + }, + { + "name": "Heartbeat", + "description": "Retrieve status information for the Console Connect API service." + }, + { + "name": "Internet of Things (IoT)", + "description": "* Simplify the ordering, deployment, and change management of your entire global Internet of Things (IoT) network with Console Connect.\n* From real-time activation and deactivation of devices to service configuration, and traffic monitoring, you benefit from end-to-end control and visibility over your global Internet of Things (IoT) assets.\n* The Console Connect Internet of Things (IoT) service is delivered via our extensive worldwide mobile 2G, 3G, and 4G partner networks and supported by our extensive private global MPLS infrastructure.\n* End-to-end Internet of Things (IoT) connectivity can be extraordinarily complex, often involving a combination of local and international connections, leased lines, public internet, mobile and Wi-Fi networks, and private and public clouds.\n* Console Connect Internet of Things (IoT) simplifies the ordering, deployment, and change management of your entire global Internet of Things (IoT) network." + }, + { + "name": "Edge SIM", + "description": "1. Edge SIM enables end to end connectivity from the customer’s edge mobile device to the Customer’s designated Cloud or data center.\n\n * Edge devices can be distributed worldwide and connected to the Cloud via local mobile networks in over 180 countries (note: ~120 countries are offered on the Console Connect portal; other countries are available on request) where there are Service Coverage and grouped into several Pricing Zones.\n * Bypassing the public Internet, the end-to-end connection from the mobile device is secured over a private path direct from the mobile device into the CloudRouter\n * Groups of SIMs called “SIMPools” act as an individual site in Cloud Router, allowing for easy configuration for the customer to build private networks to multiple clouds and data centers.\n * Configuration of Edge SIM is totally automated, allowing customers to build their own networks in minutes.\n2. An ordering service is provided in Console Connect together with a SIM management portal\n\n * Edge SIM can be ordered by the customer anytime over the console ordering portal, similar to other Console Connect services.\n\n * The newly ordered Edge SIMs can be added to any of the existing SIMPool or if require, the customer can setup a new SIMPool. SIMPools can be added to the Customer’s existing or newly defined sites on Cloud Router.\n\n### Frequently Asked Questions (FAQs)\n\n * What is Edge SIM?\n * Edge SIM allows you to extend the connectivity of your mobile devices to connect directly with your own CloudRouter network. This allows for the creation of new and novel configurations; and use cases that are more secure, reliable, and scalable as the Internet is bypassed entirely. Edge SIM is entirely automated. Networks can be configured with a few clicks, and working within minutes.\n\n * What are the major differences between the Console Connect Edge SIM and the Console Connect IoT SIM solution?\n * Existing Console Connect IoT SIMs essentially provide services via simple internet connectivity, whereas Edge SIMs bypass the Internet entirely, allowing for direct connections to Clouds and data centers globally, through CloudRouter. The Edge SIM solution is suitable for more sophisticated IoT applications, as shown in the table below:.\n\nThis is aimed at simplifying the ordering, deployment and change management of your entire global IoT network with Console Connect.\n\n * A SIMPool is a group of SIMs that share the same service gateway and configurations, such as IP addresses, subnets, and DNS servers.\n * SIMs can be added to a SIMPool or moved to another SIMPool\n * A SIMPool has to be added to the Cloud Router before the traffic can be routed to the customer network\n * The SIMPool will also be used to direct traffic to a managed firewall for customers requiring internet access in the future." + }, + { + "name": "Introduction", + "description": "### Overview\n\nCC MEF API is compliant with the Haley version of MEF LSO Sonata.\n\nSupported product type:\n\n- User-Network Interface (UNI) (i.e. a data center (DC) port)\n- Access E-Line (a Layer 2 connection between 2 DC ports)\n\nList of supported use cases:\n\n| **MEF LSO API Domain Business Process Name** | **MEF LSO API Use Case Name** | **Notes** |\n|----------------------------------------------|----------------------------------------------------|---------------------------------------------------------------------------------------------------------|\n| Address Validation | Validate Address | |\n| Address Validation | Retrieve Address by Identifier | |\n| Quote | Create Quote | |\n| Quote | Immediate Quote Response Requested and Provided | |\n| Product Order | Create Product Order | |\n| Product Order | Product Order Item to Install Product | |\n| Product Order | Product Order Item to Change Existing Product | Endpoint is implemented but it will return “`this action is not supported due to business constraints`” |\n| Product Order | Product Order Item to Disconnect Existing Product | |\n| Product Order | Retrieve Product Order by Product Order Identifier | |\n| Product Inventory | Retrieve Product List | |\n| Product Inventory | Retrieve Product by Identifier | |\n\n### Prerequisites\n\n- Your company has been verified on the Console Connect platform.\n- Your Console Connect user account should have the [Network Admin](https://www.consoleconnect.com/help/account-management/#roles-permissions) role." + }, + { + "name": "Authentication", + "description": "Users must authenticate successfully before any further API calls can be made. There are two authentication headers required for authenticating to api outlined in this section.\n\n### Console Connect API key\n\nCC api key are provisioned by Support against your Console Connect User Account. Email [Support](mailto:support@consoleconnect.com) to request a key. \n### x-sonata-buyer-key\nAnother layer of Authentication, Contact [Support](mailto:support@consoleconnect.com) for x-sonata-buyer-key in the meantime.\n\n### Example request\n```\ncurl -X GET https://api.consoleconnect.com/Sonata/mefApi/sonata/productInventory/v7/product/{id} \\\n-H \"Authorization: Bearer [[Console Connect api key]]\"\n-H \"x-sonata-buyer-key: Bearer [[buyer key]]\"\n```" + }, + { + "name": "Order_UNI_GUIDE", + "description": "## List all supported locations\nPlease use a Legacy API [- Console Connect API](https://api.consoleconnect.com/docs/#tag/Data-Center-Facilities-(DCFs)/operation/GetDCFLocations) to get all supported country and city pairs.\n## Query Supported data centers in a specific location\n- Preparation\n + Request body schema\n - `provideAlternative` : Specify whether an alternate addresses must be provided in case of partial or failed results. MEF requires this attribute always to be set to `true`.\n - `submittedGeographicAddress.@type` : Set to `FieldedAddress`.\n - `submittedGeographicAddress.country` : The country where the address is located, in ISO Alpha-2 Code.\n - `submittedGeographicAddress.city` : The city where the address is located.\n - `submittedGeographicAddress.streetName` : The street where the address is located.\n- Request example\n\n ```\n curl '{{cc api base url}}/mefApi/sonata/geographicAddressManagement/v7/geographicAddressValidation' \\\n --header 'Authorization: Bearer {{cc api key}}' \\\n --header 'x-sonata-buyer-key: bearer {{buyer key}}' \\\n --data-raw '{\n \"provideAlternative\": true,\n \"submittedGeographicAddress\": {\n \"@type\": \"FieldedAddress\",\n \"country\": \"AU\",\n \"city\": \"Sydney\",\n \"streetName\": \"\"\n }\n }'\n ```\n\n- Response example\n - You may receive multiple results under `alternateGeographicAddress` , select one from it.\n - `id` : address UUID\n - `geographicSubAddress.subUnitNumber` : address key name, will be used as `productOrderItem[].product.productConfiguration.dcfName` in create UNI order request payload.\n - `locality` : will be used as `productOrderItem[].product.productConfiguration.destUNIMetroId` in create Access Eline order request payload\n\n ```\n {\n \"validationResult\": \"partial\",\n \"alternateGeographicAddress\": [\n {\n \"id\": \"5a4d83cb7a0b6400125692cc\", \n \"@type\": \"FieldedAddress\",\n \"country\": \"AU\",\n \"city\": \"Sydney\",\n \"streetName\": \"Unit B 639 Gardeners Road Mascot\",\n \"locality\": \"e7539c5fe66f9e4ce5b08ab7\",\n \"geographicSubAddress\": {\n \"buildingName\": \"Equinix IBX SY1 - AWS ONLY\",\n \"subUnit\": [\n {\n \"subUnitNumber\": \"equinix-ibx-sy1\" \n }\n ]\n }\n },\n {\n \"id\": \"5db101aeb5d738000b67d1d0\",\n \"@type\": \"FieldedAddress\",\n \"country\": \"AU\",\n \"city\": \"Sydney\",\n \"locality\": \"e7539c5fe66f9e4ce5b08ab7\",\n \"geographicSubAddress\": {\n \"buildingName\": \"NEXTDC S1 Sydney\",\n \"subUnit\": [\n {\n \"subUnitNumber\": \"nextdc-s1-sydney\"\n }\n ]\n }\n },\n {\n \"id\": \"5db678795d545c000bc69c87\",\n \"@type\": \"FieldedAddress\",\n \"country\": \"AU\",\n \"city\": \"Sydney\",\n \"locality\": \"5db678c45d545c000bc69c88\",\n \"geographicSubAddress\": {\n \"buildingName\": \"hkg39a- Oceania -APAC\",\n \"subUnit\": [\n {\n \"subUnitNumber\": \"hkg05a\"\n }\n ]\n }\n }\n ],\n \"provideAlternative\": true,\n \"submittedGeographicAddress\": {\n \"@type\": \"FieldedAddress\",\n \"country\": \"AU\",\n \"city\": \"Sydney\",\n \"streetName\": \"\"\n }\n }\n ```\n\n## create a UNI ADD sync firm quote\n\n- Preparation\n + Request body schema\n - `buyerRequestedQuoteLevel` : set to `firm`\n - `instantSyncQuote` : set to `true` which represents **the Buyer requests an immediate Quote to be provided in the response to the creation of a Quote.**\n - Only **one** quote item is supported\n - `quoteItem[0].action` : set to `add` which represents it is a install service quote\n - `quoteItem[0].requestedQuoteItemTerm.duration.amount` : set to `1`\n - `quoteItem[0].requestedQuoteItemTerm.duration.units` : \\[calendarYears, calendarMonths\\]\n - `quoteItem[0].requestedItemTerm.endOfTermAction` : The action the Seller will take once the term expires. Set to `roll`.\n - `quoteItem[0].requestedItemTerm.rollInterval.amount` : The duration of the service when rolled. Set to `1`.\n - `quoteItem[0].requestedItemTerm.rollInterval.units` : The duration unit of the service when rolled. Set to `calendarMonths`.\n - `quoteItem[0].product.productOffering.id`: set to `UNI`\n - `quoteItem[0].product.place[].role` : Set to `INSTALL_LOCATION`.\n - `quoteItem[0].product.place[].id` : UUID of the referenced Geographic Address after an address validation request.\n - `quoteItem[0].product.place[].@type` : Set to `GeographicAddressRef`.\n - `quoteItem[0].product.productConfiguration.@type` : Set to `UNI`.\n - `quoteItem[0].product.productConfiguration.bandwidth`: The port speed in conjunction with the bandwidthUnit. Enum: `1000` ,`10000`\n - `quoteItem[0].product.productConfiguration.bandwidthUnit` : set to `MBPS`\n - other request body fields are all optional\n- Request example\n ```\n curl --location '{{cc api base url}}/mefApi/sonata/quoteManagement/v8/quote' \\\n --header 'Authorization: Bearer {{cc api key}}' \\\n --header 'x-sonata-buyer-key: bearer {{buyer key}}' \\\n --data-raw '{\n \"note\": [],\n \"requestedQuoteCompletionDate\": \"2027-12-31T23:00:00Z\",\n \"relatedContactInformation\": [\n {\n \"number\": \"111 222 333\",\n \"emailAddress\": \"buyerContact@example.com\",\n \"role\": \"buyerContactInformation\",\n \"postalAddress\": null,\n \"organization\": \"MEF\",\n \"name\": \"Joe Buyer\",\n \"numberExtension\": null\n }\n ],\n \"externalId\": \"AEL[8202] Sync Quote FIRM - ADD\",\n \"buyerRequestedQuoteLevel\": \"firm\",\n \"projectId\": \"MEF OIT\",\n \"instantSyncQuote\": true,\n \"quoteItem\": [\n {\n \"requestedQuoteItemTerm\": {\n \"name\": \"UNI Item Term\",\n \"duration\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n },\n \"endOfTermAction\": \"roll\",\n \"description\": \"no description\",\n \"rollInterval\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n }\n },\n \"note\": [],\n \"product\": {\n \"id\": null,\n \"href\": null,\n \"place\": [\n {\n \"role\": \"INSTALL_LOCATION\",\n \"href\": null,\n \"id\": \"6356792a4806220015488631\",\n \"@type\": \"GeographicAddressRef\",\n \"@schemaLocation\": null\n }\n ],\n \"productConfiguration\": {\n \"@type\": \"UNI\",\n \"bandwidth\": 10000,\n \"bandwidthUnit\": \"MBPS\"\n },\n \"productOffering\": {\n \"id\": \"UNI\",\n \"href\": null\n },\n \"productRelationship\": [\n\n ]\n },\n \"productOfferingQualificationItem\": {\n \"productOfferingQualificationId\": \"\",\n \"alternateProductProposalId\": null,\n \"productOfferingQualificationHref\": null,\n \"id\": \"UNI\"\n },\n \"relatedContactInformation\": [\n {\n \"number\": \"111 222 333\",\n \"emailAddress\": \"quoteItemTechnicalContact@example.com\",\n \"role\": \"quoteItemTechnicalContact\",\n \"postalAddress\": null,\n \"organization\": \"MEF\",\n \"name\": \"David Item\",\n \"numberExtension\": null\n },\n {\n \"number\": \"111 222 333\",\n \"emailAddress\": \"quoteItemLocationContact@example.com\",\n \"role\": \"quoteItemLocationContact\",\n \"postalAddress\": null,\n \"organization\": \"MEF\",\n \"name\": \"Konrad Item Location\",\n \"numberExtension\": null\n }\n ],\n \"agreementName\": null,\n \"action\": \"add\",\n \"dealReference\": null,\n \"id\": \"UNI\",\n \"requestedQuoteItemInstallationInterval\": {\n \"amount\": 10,\n \"units\": \"calendarMonths\"\n },\n \"quoteItemRelationship\": []\n }\n ]\n }'\n ```\n- Response example\n - `id` : quote request UUID\n - `quoteItem[0].quoteItemPrice[0].price.dutyFreeAmount.unit` : Currency, always USD\n - `quoteItem[0].quoteItemPrice[0].price.dutyFreeAmount.value` : duty free price value, it is always a monthly recurring price for UNI\n - `state` : quote state\n - `approved.orderable` : service is available in chosen address and price is returned\n - `unableToProvide` : service is not available in chosen address, there is no price returned in such state\n - ```\n {\n \"id\": \"0afe4f55-68db-489a-8614-1cb882e2d0ea\",\n \"buyerRequestedQuoteLevel\": \"firm\",\n \"relatedContactInformation\": [\n {\n \"number\": \"111 222 333\",\n \"emailAddress\": \"buyerContact@example.com\",\n \"role\": \"buyerContactInformation\",\n \"organization\": \"MEF\",\n \"name\": \"Joe Buyer\"\n },\n {\n \"number\": \"111222333\",\n \"emailAddress\": \"quoteseller@consoleconnect.com\",\n \"role\": \"sellerContactInformation\",\n \"name\": \"QuoteSeller\"\n }\n ],\n \"quoteItem\": [\n {\n \"requestedQuoteItemTerm\": {\n \"name\": \"UNI Item Term\",\n \"duration\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n },\n \"endOfTermAction\": \"roll\",\n \"description\": \"no description\",\n \"rollInterval\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n }\n },\n \"product\": {\n \"place\": [\n {\n \"role\": \"INSTALL_LOCATION\",\n \"id\": \"6356792a4806220015488631\",\n \"@type\": \"GeographicAddressRef\"\n }\n ],\n \"productConfiguration\": {\n \"@type\": \"UNI\",\n \"bandwidth\": 10000,\n \"bandwidthUnit\": \"MBPS\"\n },\n \"productOffering\": {\n \"id\": \"UNI\"\n },\n \"productRelationship\": []\n },\n \"action\": \"add\",\n \"id\": \"UNI\",\n \"subjectToFeasibilityCheck\": false,\n \"quoteItemInstallationInterval\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n },\n \"state\": \"approved.orderable\",\n \"quoteItemTerm\": [\n {\n \"name\": \"UNI Item Term\",\n \"duration\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n },\n \"endOfTermAction\": \"roll\",\n \"description\": \"no description\",\n \"rollInterval\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n }\n }\n ],\n \"quoteItemPrice\": [\n {\n \"unitOfMeasure\": \"\",\n \"price\": {\n \"dutyFreeAmount\": {\n \"unit\": \"USD\",\n \"value\": 480\n },\n \"taxRate\": \"\",\n \"taxIncludedAmount\": {\n \"unit\": \"\",\n \"value\": \"\"\n }\n },\n \"name\": \"\",\n \"priceType\": \"recurring\",\n \"description\": \"\",\n \"recurringChargePeriod\": \"month\"\n }\n ]\n }\n ],\n \"quoteDate\": \"2025-05-07 05:52:28\",\n \"externalId\": \"AEL[8202] Sync Quote FIRM - ADD\",\n \"instantSyncQuote\": true,\n \"requestedQuoteCompletionDate\": \"2027-12-31T23:00:00Z\",\n \"effectiveQuoteCompletionDate\": \"2025-05-07 05:52:28\",\n \"validFor\": {\n \"startDateTime\": \"2025-05-07 05:52:28\",\n \"endDateTime\": \"2025-05-08 05:52:28\"\n },\n \"quoteLevel\": \"firm\",\n \"state\": \"approved.orderable\"\n }\n ```\n\n## create a UNI ADD order\n\n- Preparation\n + Query parameters\n\n - `buyerId` : Your company username in Console Connect.\n + Request body schema\n - `relatedContactInformation[].number` : Phone number of the contact.\n - `relatedContactInformation[].emailAddress` : Email address of the contact.\n - `relatedContactInformation[].role` : set to `productOrderContact`.\n - `relatedContactInformation[].name` : Name of the contact.\n - only **one product order item** is supported\n - `productOrderItem[].action` : Set to `add`.\n - `productOrderItem[].id` : Set to `UNI`.\n - `productOrderItem[].product.productOffering.id` : Set to `UNI`.\n - `productOrderItem[].product.place[].role` : Set to `INSTALL_LOCATION`.\n - `productOrderItem[].product.place[].id` : Identifier of the referenced Geographic Address after an address validation request.\n - `productOrderItem[].product.place[].@type` : Set to `GeographicAddressRef`.\n - `productOrderItem[].product.productConfiguration.@type` : Set to `UNI`.\n - `productOrderItem[].product.productConfiguration.bandwidth` : The port speed in conjunction with the bandwidthUnit. Enum: `1000` ,`10000`\n - `productOrderItem[].product.productConfiguration.bandwidthUnit` : Set to `MBPS`.\n - `productOrderItem[].product.productConfiguration.name` : The port's name.\n - `productOrderItem[].product.productConfiguration.paymentType` : Set to `invoice`.\n - `productOrderItem[].product.productConfiguration.dcfName` : `geographicSubAddress.subUnitNumber` property from address validation response.\n - `productOrderItem[].requestedItemTerm.name` : The name of the term.\n - `productOrderItem[].requestedItemTerm.duration.amount` : The duration of the service. Set to `1`.\n - `productOrderItem[].requestedItemTerm.duration.units` : The duration unit of the service. Enum: `\"calendarMonths\"` `\"calendarYears\"`\n - `productOrderItem[].requestedItemTerm.endOfTermAction` : The action the Seller will take once the term expires. Set to `roll`.\n - `productOrderItem[].requestedItemTerm.rollInterval.amount` : The duration of the service when rolled. Set to `1`.\n - `productOrderItem[].requestedItemTerm.rollInterval.units` : The duration unit of the service when rolled. Set to `calendarMonths`.\n - other request body fields are all optional\n- Request example\n - ```\n curl --location '{{cc api base url}}/mefApi/sonata/productOrderingManagement/v10/productOrder?buyerId={{cc company name}}' \\\n --header 'Authorization: Bearer {{cc api key}}' \\\n --header 'x-sonata-buyer-key: bearer {{buyer key}}' \\\n --data-raw '{\n \"note\": [],\n \"relatedContactInformation\": [\n {\n \"number\": \"111 222 333\",\n \"emailAddress\": \"productOrderContact@example.com\",\n \"role\": \"productOrderContact\",\n \"postalAddress\": null,\n \"organization\": \"MEF\",\n \"name\": \"Joe Order\",\n \"numberExtension\": null\n }\n ],\n \"externalId\": \"AEL[9202] General On-net Order \",\n \"projectId\": \"MEF OIT\",\n \"productOrderItem\": [\n {\n \"relatedBuyerPON\": null,\n \"note\": [],\n \"product\": {\n \"productOffering\": {\n \"href\": null,\n \"id\": \"UNI\"\n },\n \"productConfiguration\": {\n \"@type\": \"UNI\",\n \"bandwidth\": 10000,\n \"bandwidthUnit\": \"MBPS\",\n \"name\": \"test-qc01\",\n \"paymentType\": \"invoice\",\n \"dcfName\": \"qe-dcf-1\"\n },\n \"productRelationship\": [],\n \"id\": null,\n \"href\": null,\n \"place\": [\n {\n \"role\": \"INSTALL_LOCATION\",\n \"href\": null,\n \"id\": \"6356792a4806220015488631\",\n \"@type\": \"GeographicAddressRef\",\n \"@schemaLocation\": null\n }\n ]\n },\n \"relatedContactInformation\": [\n {\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.ProductOrderItemContact@example.com\",\n \"role\": \"buyerProductOrderItemContact\",\n \"postalAddress\": null,\n \"organization\": null,\n \"name\": \"Buyer Product Order Item Contact\",\n \"numberExtension\": null\n },\n {\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.ImplementationContact@example.com\",\n \"role\": \"buyerImplementationContact\",\n \"postalAddress\": null,\n \"organization\": null,\n \"name\": \"Buyer Implementation Contact\",\n \"numberExtension\": null\n },\n {\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.TechnicalContact@example.com\",\n \"role\": \"buyerTechnicalContact\",\n \"postalAddress\": null,\n \"organization\": null,\n \"name\": \"Buyer Technical Contact \",\n \"numberExtension\": null\n },\n {\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.ItemServiceSiteContact@example.com\",\n \"role\": \"orderItemServiceSiteContact\",\n \"postalAddress\": null,\n \"organization\": null,\n \"name\": \"Buyer Technical Contact \",\n \"numberExtension\": null\n }\n ],\n \"requestedItemTerm\": {\n \"name\": \"UNI Item Term\",\n \"duration\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n },\n \"endOfTermAction\": \"roll\",\n \"description\": \"no description\",\n \"rollInterval\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n }\n },\n \"billingAccount\": {\n \"id\": \"001\"\n },\n \"productOrderItemRelationship\": [],\n \"tspRestorationPriority\": null,\n \"productOfferingQualificationItem\": {\n \"productOfferingQualificationId\": \"\",\n \"alternateProductProposalId\": null,\n \"productOfferingQualificationHref\": null,\n \"id\": \"UNI\"\n },\n \"coordinatedAction\": [],\n \"action\": \"add\",\n \"quoteItem\": {\n \"quoteHref\": null,\n \"id\": \"UNI\",\n \"quoteId\": \"3181bc4f-4934-4a21-96b2-617f97cef0d3\"\n },\n \"endCustomerName\": null,\n \"expediteIndicator\": true,\n \"expediteValue\": 1,\n \"id\": \"UNI\",\n \"requestedCompletionDate\": \"2121-11-30T23:00:00Z\"\n }\n ]\n }'\n ```\n- Response example\n - `id` : order UUID (`orderId` is used for other purpose)\n - `state` : order state, initial state is `acknowledged`, then it will be `inProgress` and `completed`\n - During the order handling process, there will be a LOA (Letter of authorization) sent to the CC user account which is extracted from the CC api key.\n - Only after the local loop is done, the order state will be changed to `completed`\n - ```\n {\n \"relatedContactInformation\": [\n {\n \"number\": \"111 222 333\",\n \"emailAddress\": \"productOrderContact@example.com\",\n \"role\": \"productOrderContact\",\n \"organization\": \"MEF\",\n \"name\": \"Joe Order\"\n },\n {\n \"number\": \"111222333\",\n \"emailAddress\": \"orderseller@consoleconnect.com\",\n \"role\": \"sellerContact\",\n \"name\": \"OrderSeller\"\n }\n ],\n \"id\": \"fa508a27-e28c-4c2f-9d41-b9f2ed52a69c\",\n \"orderDate\": \"2025-03-26 08:31:41\",\n \"productOrderItem\": [\n {\n \"action\": \"add\",\n \"billingAccount\": {\n \"id\": \"001\"\n },\n \"coordinatedAction\": [],\n \"expediteIndicator\": false,\n \"id\": \"UNI\",\n \"expectedCompletionDate\": \"2121-11-30T23:00:00Z\",\n \"note\": [],\n \"product\": {\n \"productOffering\": {\n \"id\": \"UNI\"\n },\n \"productConfiguration\": {\n \"@type\": \"UNI\",\n \"bandwidth\": 1000,\n \"bandwidthUnit\": \"MBPS\",\n \"name\": \"test-qc01\",\n \"paymentType\": \"invoice\",\n \"dcfName\": \"qe-dcf-1\"\n },\n \"productRelationship\": [],\n \"place\": [\n {\n \"role\": \"INSTALL_LOCATION\",\n \"id\": \"6356792a4806220015488631\",\n \"@type\": \"GeographicAddressRef\"\n }\n ]\n },\n \"productOfferingQualificationItem\": {\n \"productOfferingQualificationId\": \"\",\n \"id\": \"UNI\"\n },\n \"productOrderItemRelationship\": [],\n \"quoteItem\": {\n \"id\": \"UNI\",\n \"quoteId\": \"null\"\n },\n \"relatedContactInformation\": [\n {\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.ProductOrderItemContact@example.com\",\n \"role\": \"buyerProductOrderItemContact\",\n \"name\": \"Buyer Product Order Item Contact\"\n },\n {\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.ImplementationContact@example.com\",\n \"role\": \"buyerImplementationContact\",\n \"name\": \"Buyer Implementation Contact\"\n },\n {\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.TechnicalContact@example.com\",\n \"role\": \"buyerTechnicalContact\",\n \"name\": \"Buyer Technical Contact \"\n },\n {\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.ItemServiceSiteContact@example.com\",\n \"role\": \"orderItemServiceSiteContact\",\n \"name\": \"Buyer Technical Contact \"\n }\n ],\n \"requestedCompletionDate\": \"2121-11-30T23:00:00Z\",\n \"requestedItemTerm\": {\n \"name\": \"UNI Item Term\",\n \"duration\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n },\n \"endOfTermAction\": \"roll\",\n \"description\": \"no description\",\n \"rollInterval\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n }\n },\n \"expediteAcceptedIndicator\": false,\n \"state\": \"acknowledged\",\n \"itemTerm\": {\n \"duration\": {\n \"amount\": \"1\",\n \"units\": \"calendarMonths\"\n },\n \"endOfTermAction\": \"roll\",\n \"rollInterval\": {\n \"amount\": \"1\",\n \"units\": \"calendarMonths\"\n },\n \"name\": \"calendarMonths\"\n }\n }\n ],\n \"state\": \"acknowledged\",\n \"orderId\": \"67e3bb6e3efb136fe32c3d92\"\n } \n ```\n\n## Get order details by id\n\n- Preparation\n - Path parameters\n - `id` : `id` from create order response\n - Query parameters\n - `buyerId` : Your company username in Console Connect.\n- request example\n - ```\n curl --location '{{cc api base url}}/mefApi/sonata/productOrderingManagement/v10/productOrder/{{id}}?buyerId={{buyerId}}' \\\n --header 'Authorization: Bearer {{cc api key}}' \\\n --header 'x-sonata-buyer-key: bearer {{buyer key}}' \\ \n ```\n- Response example\n - ```\n {\n \"id\": \"fa508a27-e28c-4c2f-9d41-b9f2ed52a69c\",\n \"relatedContactInformation\": [\n {\n \"name\": \"Joe Order\",\n \"role\": \"productOrderContact\",\n \"number\": \"111 222 333\",\n \"emailAddress\": \"productOrderContact@example.com\",\n \"organization\": \"MEF\"\n },\n {\n \"number\": \"111222333\",\n \"emailAddress\": \"orderseller@consoleconnect.com\",\n \"role\": \"sellerContact\",\n \"name\": \"OrderSeller\"\n }\n ],\n \"productOrderItem\": [\n {\n \"action\": \"add\",\n \"billingAccount\": {\n \"id\": \"001\"\n },\n \"coordinatedAction\": [],\n \"expediteIndicator\": false,\n \"id\": \"UNI\",\n \"expectedCompletionDate\": \"2025-03-26T08:31:47.411Z\",\n \"note\": [],\n \"product\": {\n \"productOffering\": {\n \"id\": \"UNI\"\n },\n \"productConfiguration\": {\n \"name\": \"test-qc01\",\n \"@type\": \"UNI\",\n \"dcfName\": \"qe-dcf-1\",\n \"bandwidth\": 1000,\n \"paymentType\": \"invoice\",\n \"bandwidthUnit\": \"MBPS\"\n },\n \"productRelationship\": [],\n \"place\": [\n {\n \"id\": \"6356792a4806220015488631\",\n \"role\": \"INSTALL_LOCATION\",\n \"@type\": \"GeographicAddressRef\"\n }\n ]\n },\n \"productOfferingQualificationItem\": {\n \"id\": \"UNI\",\n \"productOfferingQualificationId\": \"\"\n },\n \"productOrderItemRelationship\": [],\n \"quoteItem\": {\n \"id\": \"UNI\",\n \"quoteId\": \"null\"\n },\n \"relatedContactInformation\": [\n {\n \"name\": \"Buyer Product Order Item Contact\",\n \"role\": \"buyerProductOrderItemContact\",\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.ProductOrderItemContact@example.com\"\n },\n {\n \"name\": \"Buyer Implementation Contact\",\n \"role\": \"buyerImplementationContact\",\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.ImplementationContact@example.com\"\n },\n {\n \"name\": \"Buyer Technical Contact \",\n \"role\": \"buyerTechnicalContact\",\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.TechnicalContact@example.com\"\n },\n {\n \"name\": \"Buyer Technical Contact \",\n \"role\": \"orderItemServiceSiteContact\",\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.ItemServiceSiteContact@example.com\"\n }\n ],\n \"requestedCompletionDate\": \"2121-11-30T23:00:00Z\",\n \"requestedItemTerm\": {\n \"name\": \"UNI Item Term\",\n \"duration\": {\n \"units\": \"calendarMonths\",\n \"amount\": 1\n },\n \"description\": \"no description\",\n \"rollInterval\": {\n \"units\": \"calendarMonths\",\n \"amount\": 1\n },\n \"endOfTermAction\": \"roll\"\n },\n \"expediteAcceptedIndicator\": false,\n \"itemTerm\": {\n \"name\": \"calendarMonths\",\n \"duration\": {\n \"units\": \"calendarMonths\",\n \"amount\": \"1\"\n },\n \"rollInterval\": {\n \"units\": \"calendarMonths\",\n \"amount\": \"1\"\n },\n \"endOfTermAction\": \"roll\"\n },\n \"state\": \"acknowledged\",\n \"stateChange\": [\n {\n \"state\": \"inProgress\",\n \"changeDate\": \"2025-03-26T08:31:47.411Z\"\n }\n ]\n }\n ],\n \"orderDate\": \"2025-03-26 08:31:41\",\n \"state\": \"acknowledged\",\n \"orderId\": \"67e3bb6e3efb136fe32c3d92\",\n \"instanceId\": \"\"\n }\n ```\n\n## Get UNI product by add order id\n\nWhen the order is in `completed` state , there will be a active UNI product created, you could query the product details by order id.\n\n- Preparation\n - Query parameters\n - `productOrderId` : `id` from create order response\n - `buyerId` : Your company username in Console Connect.\n- request example\n - ```\n curl --location '{{cc api base url}}/mefApi/sonata/productInventory/v7/product?productOrderId={{order id}}&buyerId={{cc company name}}' \\\n --header 'Authorization: Bearer {{cc api key}}' \\\n --header 'x-sonata-buyer-key: bearer {{buyer key}}' \\\n ```\n- Response example\n - `id` : provisioned product instance id\n - `state`: \\[active, terminated, pendingActive, pendingTerminate, suspended, cancelled\\]\n - ```\n [\n {\n \"id\": \"67c14c7e422412a90585a7c7\",\n \"startDate\": \"2025-02-28T05:33:20.554Z\",\n \"status\": \"active\",\n \"productSpecification\": {},\n \"relatedSite\": [],\n \"productOffering\": {\n \"id\": \"UNI\"\n },\n \"lastUpdateDate\": \"\",\n \"externalId\": \"AEL[9301] General On-net Order \",\n \"productRelationship\": [],\n \"billingAccount\": {\n \"id\": \"001\"\n },\n \"productOrderItem\": [\n {\n \"productOrderHref\": \"\",\n \"productOrderItemId\": \"UNI\",\n \"productOrderId\": \"67c14aa0bec3bd311c3de46c\"\n }\n ]\n }\n ]\n ```\n\n## Get product detail by product id\n\nAfter you get the product id from above endpoint, you could also query product detail by product id. \n\n- Preparation\n - Path parameters\n - `productId` : `id` from get UNI port by order id.\n - Query parameters\n - `buyerId` : Your company username in Console Connect.\n- request example\n - ```\n curl --location '{{cc api base url}}/mefApi/sonata/productInventory/v7/product/{{productId}}?buyerId={{cc company name}}' \\\n --header 'Authorization: Bearer {{cc api key}}' \\\n --header 'x-sonata-buyer-key: bearer {{buyer key}}' \\\n ```\n- Response example\n - `id` : provisioned product instance id\n - `state`: \\[active, terminated, pendingActive, pendingTerminate, suspended, cancelled\\]\n \n ```\n {\n \"id\": \"6840040154392a0ac9eb8d3d\",\n \"startDate\": \"2025-06-04T08:29:58.287Z\",\n \"status\": \"terminated\",\n \"productOrderItem\": [\n {\n \"productOrderHref\": \"\",\n \"productOrderItemId\": \"UNI\",\n \"productOrderId\": \"23271c8c-4ec2-4c9d-a183-892d9b763e57\"\n }\n ],\n \"relatedSite\": [\n {\n \"role\": \"INSTALL_LOCATION\",\n \"id\": \"6356792a4806220015488631\",\n \"href\": \"\"\n }\n ],\n \"productOffering\": {\n \"href\": \"\",\n \"id\": \"UNI\"\n },\n \"productTerm\": [\n {\n \"duration\": {\n \"units\": \"calendarMonths\",\n \"amount\": 1\n },\n \"endOfTermAction\": \"roll\",\n \"name\": \"UNI Item Term\",\n \"rollInterval\": {\n \"units\": \"calendarMonths\",\n \"amount\": 1\n }\n }\n ],\n \"productRelationship\": [],\n \"productConfiguration\": {\n \"name\": \"test-qc01\",\n \"@type\": \"UNI\",\n \"dcfName\": \"qe-dcf-1\",\n \"bandwidth\": 1000,\n \"paymentType\": \"invoice\",\n \"bandwidthUnit\": \"MBPS\"\n },\n \"availableBandwidth\": 1000,\n \"lastUpdateDate\": \"2025-06-04T10:09:34.000Z\",\n \"createdDate\": \"2025-06-04T08:29:53.753Z\"\n }\n ```\n\n## Terminate/Delete a UNI product by product id\n\n- Preparation\n - Query parameters\n - `buyerId` : Your company username in Console Connect.\n - Request Body\n - `relatedContactInformation[].number` : Phone number of the contact.\n - `relatedContactInformation[].emailAddress` : Email address of the contact.\n - `relatedContactInformation[].role` : set to `productOrderContact`.\n - `relatedContactInformation[].name` : Name of the contact.\n - only one `productOrderItem` is allowed\n - `productOrderItem[0].id` : set to `UNI`\n - `productOrderItem[0].product.id` : the id of the product to be deleted\n - `productOrderItem[0].action` : set to `delete`\n- request example\n - ```\n curl --location '{{cc api base url}}/mefApi/sonata/productOrderingManagement/v10/productOrder?buyerId={{cc company name}}' \\\n --header 'Authorization: Bearer {{cc api key}}' \\\n --header 'x-sonata-buyer-key: bearer {{buyer key}}' \\\n --data-raw '{\n {\n \"note\": [],\n \"relatedContactInformation\": [\n {\n \"number\": \"111 222 333\",\n \"emailAddress\": \"productOrderContact@example.com\",\n \"role\": \"productOrderContact\",\n \"postalAddress\": null,\n \"organization\": \"MEF\",\n \"name\": \"Joe Order\",\n \"numberExtension\": null\n }\n ],\n \"externalId\": \"AEL[9401] General On-net Order - Disconnect\",\n \"projectId\": \"MEF OIT\",\n \"productOrderItem\": [\n {\n \"product\": {\n \"id\": \"681b0298f40703c905c48a54\"\n },\n \"action\": \"delete\",\n \"id\": \"UNI\"\n }\n ]\n }'\n ```\n- Response example\n - When delete order is in complete status, the deleted product will be changed into terminated state.\n - ```\n {\n \"id\": \"e382935c-3576-4408-93a5-f31711d4efe4\",\n \"relatedContactInformation\": [\n {\n \"number\": \"111 222 333\",\n \"emailAddress\": \"productOrderContact@example.com\",\n \"role\": \"productOrderContact\",\n \"organization\": \"MEF\",\n \"name\": \"Joe Order\"\n },\n {\n \"number\": \"111222333\",\n \"emailAddress\": \"orderseller@consoleconnect.com\",\n \"role\": \"sellerContact\",\n \"name\": \"OrderSeller\"\n }\n ],\n \"productOrderItem\": [\n {\n \"product\": {\n \"id\": \"681b0298f40703c905c48a54\"\n },\n \"action\": \"delete\",\n \"id\": \"UNI\"\n }\n ],2\n \"orderDate\": \"2025-05-07 09:20:20\",\n \"state\": \"acknowledged\",\n \"orderId\": \"681b0298f40703c905c48a54\"\n }\n ```", + "x-displayName": "Order UNI(Port)" + }, + { + "name": "Order_ELINE_GUIDE", + "description": "## Select source address and destination address of the Access Eline to be quoted\nSame with UNI, please use address validation endpoint to get the address id of both source and destination of the Access Eline to be quoted.\n\n- Request Example\n```\ncurl '{{cc api base url}}/mefApi/sonata/geographicAddressManagement/v7/geographicAddressValidation' \\\n--header 'Authorization: Bearer {{cc api token}}' \\\n--header 'x-sonata-buyer-key: bearer {{buyer token}}' \\\n--data-raw '{\n \"provideAlternative\": true,\n \"submittedGeographicAddress\": {\n \"@type\": \"FieldedAddress\",\n \"country\": \"AU\",\n \"city\": \"Sydney\",\n \"streetNccame\": \"\"\n }\n``` \n- Response Example\n```\n{\n \"validationResult\": \"partial\",\n \"alternateGeographicAddress\": [\n {\n \"id\": \"5a4d83cb7a0b6400125692cc\",\n \"@type\": \"FieldedAddress\",\n \"country\": \"AU\",\n \"city\": \"Sydney\",\n \"streetName\": \"Unit B 639 Gardeners Road Mascot\",\n \"locality\": \"e7539c5fe66f9e4ce5b08ab7\",\n \"geographicSubAddress\": {\n \"buildingName\": \"Equinix IBX SY1 - AWS ONLY\",\n \"subUnit\": [\n {\n \"subUnitNumber\": \"equinix-ibx-sy1\"\n }\n ]\n }\n },\n {\n \"id\": \"5db101aeb5d738000b67d1d0\",\n \"@type\": \"FieldedAddress\",\n \"country\": \"AU\",\n \"city\": \"Sydney\",\n \"locality\": \"e7539c5fe66f9e4ce5b08ab7\",\n \"geographicSubAddress\": {\n \"buildingName\": \"NEXTDC S1 Sydney\",\n \"subUnit\": [\n {\n \"subUnitNumber\": \"nextdc-s1-sydney\"\n }\n ]\n }\n },\n {\n \"id\": \"5db678795d545c000bc69c87\",\n \"@type\": \"FieldedAddress\",\n \"country\": \"AU\",\n \"city\": \"Sydney\",\n \"locality\": \"5db678c45d545c000bc69c88\",\n \"geographicSubAddress\": {\n \"buildingName\": \"hkg39a- Oceania -APAC\",\n \"subUnit\": [\n {\n \"subUnitNumber\": \"hkg05a\"\n }\n ]\n }\n }\n ],\n \"provideAlternative\": true,\n \"submittedGeographicAddress\": {\n \"@type\": \"FieldedAddress\",\n \"country\": \"AU\",\n \"city\": \"Sydney\",\n \"streetName\": \"\"\n }\n}\n```\n## Create a Access Eline ADD quote\n- Preparation\n + Request body schema\n - `buyerRequestedQuoteLevel` : set to `firm`.\n - `instantSyncQuote` : set to `true` which represents the Buyer requests an immediate Quote to be provided in the response to the creation of a Quote.\n - Only **one quote item** is supported\n - `quoteItem[0].action` : set to `add` which represents it is a install service quote\n - `quoteItem[0].requestedQuoteItemTerm.duration.units` : The duration unit of the service. Enum:[calendarDays, calendarMonths, calendarYears]\n - `quoteItem[0].requestedItemTerm.endOfTermAction` : The action the Seller will take once the term expires. Set to `roll`.\n - `quoteItem[0].requestedItemTerm.rollInterval.amount` : The duration of the service when rolled. Set to `1`.\n - `quoteItem[0].requestedItemTerm.rollInterval.units` : The duration unit of the service when rolled. Set to `calendarMonths`.\n - `quoteItem[0].product.productOffering.id` : set to `ACCESS_E_LINE`\n - `quoteItem[0].product.place[0].role` : Set to `INSTALL_LOCATION`.\n - `quoteItem[0].product.place[0].id` : UUID of the referenced source Geographic Address after an address validation request.\n - `quoteItem[0].product.place[1].role` : Set to `INSTALL_LOCATION`.\n - `quoteItem[0].product.place[1].id` : UUID of the referenced destination Geographic Address after an address validation request.\n - `quoteItem[0].product.place[].@type` : Set to `GeographicAddressRef`.\n - `productOrderItem[].product.productRelationship[0].relationshipType` : The source port. Set to `CONNECTS_TO_ENNI`.\n - `productOrderItem[].product.productRelationship[1].relationshipType` : The destination port. Set to `CONNECTS_TO_UNI`.\n - `quoteItem[0].product.productConfiguration.@type` : Set to `ACCESS_E_LINE`.\n - `quoteItem[0].product.productConfiguration.bandwidth`: [1 -10000],the max is based on the UNI bandwidth.\n - `quoteItem[0].product.productConfiguration.bandwidthUnit` : set to `MBPS`\n - all the other request fields are optional\n\n- request example\n```\ncurl --location '{{cc api base url}}/mefApi/sonata/quoteManagement/v8/quote' \\\n--header 'Authorization: Bearer {{cc api token}}' \\\n--header 'x-sonata-buyer-key: bearer {{buyer token}}' \\\n--data-raw '\n{\n \"note\": [],\n \"requestedQuoteCompletionDate\": \"2027-12-31T23:00:00Z\",\n \"relatedContactInformation\": [\n {\n \"number\": \"111 222 333\",\n \"emailAddress\": \"buyerContact@example.com\",\n \"role\": \"buyerContactInformation\",\n \"postalAddress\": null,\n \"organization\": \"MEF\",\n \"name\": \"Joe Buyer\",\n \"numberExtension\": null\n }\n ],\n \"externalId\": \"AEL[8202] Sync Quote FIRM - ADD\",\n \"buyerRequestedQuoteLevel\": \"firm\",\n \"projectId\": \"MEF OIT\",\n \"instantSyncQuote\": true,\n \"quoteItem\": [\n {\n \"requestedQuoteItemTerm\": {\n \"name\": \"ELine Item Term\",\n \"duration\": {\n \"amount\": 3,\n \"units\": \"calendarMonths\"\n },\n \"endOfTermAction\": \"roll\",\n \"description\": \"no description\",\n \"rollInterval\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n }\n },\n \"note\": [],\n \"product\": {\n \"id\": null,\n \"href\": null,\n \"place\": [\n {\n \"role\": \"INSTALL_LOCATION\",\n \"href\": null,\n \"id\": \"6360d0915064cc00157f7984\",\n \"@type\": \"GeographicAddressRef\",\n \"@schemaLocation\": null\n },\n {\n \"role\": \"INSTALL_LOCATION\",\n \"href\": null,\n \"id\": \"6356792a4806220015488631\",\n \"@type\": \"GeographicAddressRef\",\n \"@schemaLocation\": null\n }\n ],\n \"productConfiguration\": {\n \"@type\": \"ACCESS_E_LINE\",\n \"bandwidth\": 1,\n \"bandwidthUnit\": \"MBPS\",\n \"classOfService\": \"SILVER\",\n \"paymentType\": \"invoice\",\n \"name\": \"Qe 1 Company Connection 0904\",\n \"buyerCompanyId\": \"qe1company\",\n \"destUNIMetroId\": \"5db65dcf5d545c000bc6884b\",\n \"type\": \"LAYER2\"\n },\n \"productOffering\": {\n \"id\": \"ACCESS_E_LINE\",\n \"href\": null\n },\n \"productRelationship\": [\n {\n \"relationshipType\": \"CONNECTS_TO_ENNI\",\n \"id\": \"\",\n \"href\": null,\n \"groupingKey\": null\n },\n {\n \"relationshipType\": \"CONNECTS_TO_UNI\",\n \"id\": \"\",\n \"href\": null\n }\n ]\n },\n \"productOfferingQualificationItem\": {\n \"productOfferingQualificationId\": \"\",\n \"alternateProductProposalId\": null,\n \"productOfferingQualificationHref\": null,\n \"id\": \"ELINE\"\n },\n \"relatedContactInformation\": [\n {\n \"number\": \"111 222 333\",\n \"emailAddress\": \"quoteItemTechnicalContact@example.com\",\n \"role\": \"quoteItemTechnicalContact\",\n \"postalAddress\": null,\n \"organization\": \"MEF\",\n \"name\": \"David Item\",\n \"numberExtension\": null\n }\n ],\n \"agreementName\": null,\n \"action\": \"add\",\n \"dealReference\": null,\n \"id\": \"ELINE\",\n \"requestedQuoteItemInstallationInterval\": {\n \"amount\": 10,\n \"units\": \"calendarMonths\"\n },\n \"quoteItemRelationship\": [],\n \"quoteItemTerm\": \"\"\n }\n ]\n}'\n```\n- Response Example\n - `quoteItem[0].quoteItemPrice[*].price.dutyFreeAmount.value` will be always a total price based on requested duration amount and unit\n```\n{\n \"id\": \"08864d78-90f5-458e-a633-8986ef2559c5\",\n \"buyerRequestedQuoteLevel\": \"firm\",\n \"relatedContactInformation\": [\n {\n \"number\": \"111 222 333\",\n \"emailAddress\": \"buyerContact@example.com\",\n \"role\": \"buyerContactInformation\",\n \"organization\": \"MEF\",\n \"name\": \"Joe Buyer\"\n },\n {\n \"number\": \"00852-64197859\",\n \"emailAddress\": \"QuoteSeller@example.com\",\n \"role\": \"sellerContactInformation\",\n \"name\": \"consoleconnect\"\n }\n ],\n \"quoteItem\": [\n {\n \"requestedQuoteItemTerm\": {\n \"name\": \"ELine Item Term\",\n \"duration\": {\n \"amount\": 3,\n \"units\": \"calendarMonths\"\n },\n \"endOfTermAction\": \"roll\",\n \"description\": \"no description\",\n \"rollInterval\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n }\n },\n \"product\": {\n \"place\": [\n {\n \"role\": \"INSTALL_LOCATION\",\n \"id\": \"6360d0915064cc00157f7984\",\n \"@type\": \"GeographicAddressRef\"\n },\n {\n \"role\": \"INSTALL_LOCATION\",\n \"id\": \"6356792a4806220015488631\",\n \"@type\": \"GeographicAddressRef\"\n }\n ],\n \"productConfiguration\": {\n \"@type\": \"ACCESS_E_LINE\",\n \"bandwidth\": 100,\n \"bandwidthUnit\": \"MBPS\",\n \"classOfService\": \"SILVER\",\n \"paymentType\": \"invoice\",\n \"name\": \"Qe 1 Company Connection 0904\",\n \"buyerCompanyId\": \"qe1company\",\n \"destUNIMetroId\": \"5db65dcf5d545c000bc6884b\",\n \"type\": \"LAYER2\"\n },\n \"productOffering\": {\n \"id\": \"ACCESS_E_LINE\"\n },\n \"productRelationship\": [\n {\n \"relationshipType\": \"CONNECTS_TO_ENNI\",\n \"id\": \"6371e5fa2fb2fa00155a3535\"\n },\n {\n \"relationshipType\": \"CONNECTS_TO_UNI\",\n \"id\": \"63634cbf11ffdd00151fc6fb\"\n }\n ]\n },\n \"action\": \"add\",\n \"id\": \"ELINE\",\n \"subjectToFeasibilityCheck\": false,\n \"quoteItemInstallationInterval\": {\n \"amount\": 1,\n \"units\": \"businessMinutes\"\n },\n \"state\": \"approved.orderable\",\n \"quoteItemTerm\": [\n {\n \"name\": \"ELine Item Term\",\n \"duration\": {\n \"amount\": 3,\n \"units\": \"calendarMonths\"\n },\n \"endOfTermAction\": \"roll\",\n \"description\": \"no description\",\n \"rollInterval\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n }\n }\n ],\n \"quoteItemPrice\": [\n {\n \"unitOfMeasure\": \"\",\n \"price\": {\n \"dutyFreeAmount\": {\n \"unit\": \"USD\",\n \"value\": 1547.81\n },\n \"taxRate\": \"\",\n \"taxIncludedAmount\": {\n \"unit\": \"\",\n \"value\": \"\"\n }\n },\n \"name\": \"\",\n \"priceType\": \"\",\n \"description\": \"\",\n \"recurringChargePeriod\": \"\"\n }\n ]\n }\n ],\n \"quoteDate\": \"2025-06-05 06:47:13\",\n \"externalId\": \"AEL[8202] Sync Quote FIRM - ADD\",\n \"instantSyncQuote\": true,\n \"requestedQuoteCompletionDate\": \"\",\n \"effectiveQuoteCompletionDate\": \"2025-06-05 06:47:13\",\n \"validFor\": {\n \"startDateTime\": \"2025-06-05 06:47:13\",\n \"endDateTime\": \"2025-06-06 06:47:13\"\n },\n \"quoteLevel\": \"firm\",\n \"state\": \"approved.orderable\"\n}\n```\n\n## Choose Source port and destination port of the Access Eline to be ordered\n- Legacy Port\nIf your port is provisioned with non-standard Console Connect API, then your could use the following legacy endpoint to query the port\n```\ncurl 'https://api.consoleconnect.com/api/company/:companyUsername/ports?deleted=false' \\\n --header 'Authorization: Bearer ' \\\n ```\n\n- Sonata Port\nAlternatively, if you provisioned a port with the Console Connect Sonata API you can use the Sonata product inventory API to query your ports by order id and use the information in the response call to provision the circuit with the Sonata API endpoint.\n```\ncurl --location '{{cc api base url}}/mefApi/sonata/productInventory/v7/product?productOrderId={{order id}}&buyerId={{cc company name}}' \\\n--header 'Authorization: Bearer {{cc api token}}' \\\n--header 'x-sonata-buyer-key: bearer {{kraken buyer token}}' \\\n```\n\n## Create Access Eline Order\n- Preparation\n - Query parameters\n - `buyerId` : Your company username in Console Connect.\n\n - Request body schema\n - `relatedContactInformation[].number` : Phone number of the contact.\n - `relatedContactInformation[].emailAddress` : Email address of the contact.\n - `relatedContactInformation[].role` : set to productOrderContact.\n - `relatedContactInformation[].name` : Name of the contact.\n - `productOrderItem[].action` : Set to `add`.\n - `productOrderItem[].product.productOffering.id` : Set to `ACCESS_E_LINE`.\n - `productOrderItem[].product.productConfiguration.@type` : Set to `ACCESS_E_LINE`.\n - `productOrderItem[].product.productConfiguration.bandwidth` : The bandwidth of the connection.\n\n - `productOrderItem[].product.productConfiguration.bandwidthUnit` : Set to `MBPS`.\n\n - `productOrderItem[].product.productConfiguration.classOfService` : The class of service for the connection. Enum: `“SILVER\" \"GOLD\"`\n\n - `productOrderItem[].product.productConfiguration.buyerCompanyId` : The destination company username. \n\n - `productOrderItem[].product.productConfiguration.destUNIMetroId` : The locality of destination address in address validation response . \n\n - `productOrderItem[].product.productConfiguration.type` : Set to `LAYER2`.\n\n - `productOrderItem[].product.productConfiguration.name` : The connection name.\n\n - p`roductOrderItem[].product.productConfiguration.paymentTyp`e : Set to `invoice`.\n\n - `productOrderItem[].product.productRelationship[0].relationshipType` : The source port. Set to `CONNECTS_TO_ENNI`.\n\n - `productOrderItem[].product.productRelationship[0].id` : The source port ID (it usually should be NNI port id ). \n\n - `productOrderItem[].product.productRelationship[1].relationshipType` : The destination port. Set to `CONNECTS_TO_UNI`.\n\n - `productOrderItem[].product.productRelationship[1].id` : The destination port ID. \n\n - `productOrderItem[].requestedItemTerm.duration.amount` : The duration of the service.\n - `productOrderItem[].requestedItemTerm.duration.units` : The unit duration of the service. Enum: `\"calendarMonths\" \"calendarDays\" \"calendarYears\" `\n - `productOrderItem[].requestedItemTerm.endOfTermAction` : The action the Seller will take once the term expires. Set to `roll`.\n - `productOrderItem[].requestedItemTerm.rollInterval.amount` : The duration of the service when rolled. Set to `1`.\n - `productOrderItem[].requestedItemTerm.rollInterval.units` : The unit duration of the service. Set to `calendarMonths`.\n - all the other request fields are optional.\n\n- request example\n```\ncurl --location '{{cc api base url}}/mefApi/sonata/productOrderingManagement/v10/productOrder?buyerId={{cc company name}}' \\\n--header 'Authorization: Bearer {{cc api token}}' \\\n--header 'x-sonata-buyer-key: bearer {{buyer token}}' \\\n--data-raw '{\n \"note\": [],\n \"relatedContactInformation\": [\n {\n \"number\": \"111 222 333\",\n \"emailAddress\": \"productOrderContact@example.com\",\n \"role\": \"productOrderContact\",\n \"postalAddress\": null,\n \"organization\": \"MEF\",\n \"name\": \"Joe Order\",\n \"numberExtension\": null\n }\n ],\n \"externalId\": \"AEL[9202] General On-net Order \",\n \"projectId\": \"MEF OIT\",\n \"productOrderItem\": [\n {\n \"relatedBuyerPON\": null,\n \"note\": [],\n \"product\": {\n \"productOffering\": {\n \"href\": null,\n \"id\": \"ACCESS_E_LINE\"\n },\n \"productConfiguration\": {\n \"@type\": \"ACCESS_E_LINE\",\n \"bandwidth\": 1,\n \"bandwidthUnit\": \"MBPS\",\n \"classOfService\": \"SILVER\",\n \"paymentType\": \"invoice\",\n \"name\": \"Qe 1 Company Connection 0904\",\n \"buyerCompanyId\": \"qe1company\",\n \"destUNIMetroId\": \"5db65dcf5d545c000bc6884b\",\n \"type\": \"LAYER2\"\n },\n \"productRelationship\": [\n {\n \"relationshipType\": \"CONNECTS_TO_ENNI\",\n \"id\": \"6371e5fa2fb2fa00155a3535\",\n \"href\": null\n },\n {\n \"relationshipType\": \"CONNECTS_TO_UNI\",\n \"id\": \"63634cbf11ffdd00151fc6fb\",\n \"href\": null\n }\n ],\n \"id\": null,\n \"href\": null,\n \"place\": [\n {\n \"role\": \"INSTALL_LOCATION\",\n \"href\": null,\n \"id\": \"6360d0915064cc00157f7984\",\n \"@type\": \"GeographicAddressRef\",\n \"@schemaLocation\": null\n },\n {\n \"role\": \"INSTALL_LOCATION\",\n \"href\": null,\n \"id\": \"6356792a4806220015488631\",\n \"@type\": \"GeographicAddressRef\",\n \"@schemaLocation\": null\n }\n ]\n },\n \"relatedContactInformation\": [\n {\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.ProductOrderItemContact@example.com\",\n \"role\": \"buyerProductOrderItemContact\",\n \"postalAddress\": null,\n \"organization\": null,\n \"name\": \"Buyer Product Order Item Contact\",\n \"numberExtension\": null\n },\n {\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.ImplementationContact@example.com\",\n \"role\": \"buyerImplementationContact\",\n \"postalAddress\": null,\n \"organization\": null,\n \"name\": \"Buyer Implementation Contact\",\n \"numberExtension\": null\n },\n {\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.TechnicalContact@example.com\",\n \"role\": \"buyerTechnicalContact\",\n \"postalAddress\": null,\n \"organization\": null,\n \"name\": \"Buyer Technical Contact \",\n \"numberExtension\": null\n }\n ],\n \"requestedItemTerm\": {\n \"name\": \"ELine Item Term\",\n \"duration\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n },\n \"endOfTermAction\": \"roll\",\n \"description\": \"no description\",\n \"rollInterval\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n }\n },\n \"billingAccount\": {\n \"id\": \"001\"\n },\n \"productOrderItemRelationship\": [],\n \"tspRestorationPriority\": null,\n \"productOfferingQualificationItem\": {\n \"productOfferingQualificationId\": \"\",\n \"alternateProductProposalId\": null,\n \"productOfferingQualificationHref\": null,\n \"id\": \"ELINE\"\n },\n \"coordinatedAction\": [],\n \"action\": \"add\",\n \"quoteItem\": {\n \"quoteHref\": null,\n \"id\": \"ELINE\",\n \"quoteId\": \"3181bc4f-4934-4a21-96b2-617f97cef0d3\"\n },\n \"endCustomerName\": null,\n \"expediteIndicator\": true,\n \"expediteValue\": 1,\n \"id\": \"ELINE\",\n \"requestedCompletionDate\": \"2121-11-30T23:00:00Z\"\n }\n ]\n}'\n```\n\n- Response Example\n\n```\n{\n \"relatedContactInformation\": [\n {\n \"number\": \"111 222 333\",\n \"emailAddress\": \"productOrderContact@example.com\",\n \"role\": \"productOrderContact\",\n \"organization\": \"MEF\",\n \"name\": \"Joe Order\"\n },\n {\n \"number\": \"111222333\",\n \"emailAddress\": \"orderseller@consoleconnect.com\",\n \"role\": \"sellerContact\",\n \"name\": \"OrderSeller\"\n }\n ],\n \"id\": \"11f2918f-1306-4d8b-bfec-053d89cd6837\",\n \"orderDate\": \"2025-05-07 09:20:15\",\n \"productOrderItem\": [\n {\n \"action\": \"add\",\n \"billingAccount\": {\n \"id\": \"001\"\n },\n \"coordinatedAction\": [],\n \"expediteIndicator\": true,\n \"id\": \"ELINE\",\n \"expectedCompletionDate\": \"2121-11-30T23:00:00Z\",\n \"note\": [],\n \"product\": {\n \"productOffering\": {\n \"id\": \"ACCESS_E_LINE\"\n },\n \"productConfiguration\": {\n \"@type\": \"ACCESS_E_LINE\",\n \"bandwidth\": 1,\n \"bandwidthUnit\": \"MBPS\",\n \"classOfService\": \"SILVER\",\n \"paymentType\": \"invoice\",\n \"name\": \"Qe 1 Company Connection 0904\",\n \"buyerCompanyId\": \"qe1company\",\n \"destUNIMetroId\": \"5db65dcf5d545c000bc6884b\",\n \"type\": \"LAYER2\"\n },\n \"productRelationship\": [\n {\n \"relationshipType\": \"CONNECTS_TO_ENNI\",\n \"id\": \"6371e5fa2fb2fa00155a3535\"\n },\n {\n \"relationshipType\": \"CONNECTS_TO_UNI\",\n \"id\": \"63634cbf11ffdd00151fc6fb\"\n }\n ],\n \"place\": [\n {\n \"role\": \"INSTALL_LOCATION\",\n \"id\": \"6360d0915064cc00157f7984\",\n \"@type\": \"GeographicAddressRef\"\n },\n {\n \"role\": \"INSTALL_LOCATION\",\n \"id\": \"6356792a4806220015488631\",\n \"@type\": \"GeographicAddressRef\"\n }\n ],\n \"id\": \"681b25d272bebaa5e0ad4807\"\n },\n \"itemTerm\": {\n \"duration\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n },\n \"endOfTermAction\": \"roll\",\n \"rollInterval\": {\n \"amount\": \"1\",\n \"units\": \"calendarMonths\"\n },\n \"name\": \"calendarMonths\"\n },\n \"productOfferingQualificationItem\": {\n \"productOfferingQualificationId\": \"\",\n \"id\": \"ELINE\"\n },\n \"productOrderItemRelationship\": [],\n \"quoteItem\": {\n \"id\": \"ELINE\",\n \"quoteId\": \"3181bc4f-4934-4a21-96b2-617f97cef0d3\"\n },\n \"relatedContactInformation\": [\n {\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.ProductOrderItemContact@example.com\",\n \"role\": \"buyerProductOrderItemContact\",\n \"name\": \"Buyer Product Order Item Contact\"\n },\n {\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.ImplementationContact@example.com\",\n \"role\": \"buyerImplementationContact\",\n \"name\": \"Buyer Implementation Contact\"\n },\n {\n \"number\": \"+12-345-678-90\",\n \"emailAddress\": \"Buyer.TechnicalContact@example.com\",\n \"role\": \"buyerTechnicalContact\",\n \"name\": \"Buyer Technical Contact \"\n }\n ],\n \"requestedCompletionDate\": \"2121-11-30T23:00:00Z\",\n \"requestedItemTerm\": {\n \"name\": \"ELine Item Term\",\n \"duration\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n },\n \"endOfTermAction\": \"roll\",\n \"description\": \"no description\",\n \"rollInterval\": {\n \"amount\": 1,\n \"units\": \"calendarMonths\"\n }\n },\n \"expediteAcceptedIndicator\": true,\n \"state\": \"acknowledged\"\n }\n ],\n \"state\": \"acknowledged\",\n \"orderId\": \"681b25d272bebaa5e0ad4807\"\n}\n```\n\nSimilar with UNI, once order is in complete state, you could query the Eline product by add order id, query product detail by product id.\n\n## Delete a Eline product by id\nDeleting a existing product will create a delete order.\n\n- Preparation\n\n - call legacy api to disable the Eline before terminate it\n - https://api.consoleconnect.com/api/company/{companyName}/connections/{connectionId}/disable\n - Query Parameter\n - `buyerId` : Your company username in Console Connect.\n - Request Body Schema\n - `relatedContactInformation[].number` : Phone number of the contact.\n - `relatedContactInformation[].emailAddress` : Email address of the contact.\n - `relatedContactInformation[].role` : set to `productOrderContact`.\n - `relatedContactInformation[].name` : Name of the contact.\n - only **one productOrderItem** is allowed\n - `productOrderItem[0].id` : set to `ACCESS_E_LINE`\n - `productOrderItem[0].product.id` : the id of the product to be deleted\n - `productOrderItem[0].action` : set to `delete`\n\n- request example\n\n```\ncurl --location '{{cc api base url}}/mefApi/sonata/productOrderingManagement/v10/productOrder?buyerId={{cc company name}}' \\\n--header 'Authorization: Bearer {{cc api token}}' \\\n--header 'x-sonata-buyer-key: bearer {{buyer token}}' \\\n--data-raw '{\n \"note\": [],\n \"relatedContactInformation\": [\n {\n \"number\": \"111 222 333\",\n \"emailAddress\": \"productOrderContact@example.com\",\n \"role\": \"productOrderContact\",\n \"postalAddress\": null,\n \"organization\": \"MEF\",\n \"name\": \"Joe Order\",\n \"numberExtension\": null\n }\n ],\n \"externalId\": \"AEL[9401] General On-net Order - Disconnect\",\n \"projectId\": \"MEF OIT\",\n \"productOrderItem\": [\n {\n \"product\": {\n \"id\": \"681a749da2523f4db645afc2\"\n },\n \"action\": \"delete\",\n \"id\": \"ACCESS_E_LINE\"\n }\n ]\n}'\n```\n\n- Response example\n```\n{\n \"id\": \"61a55ae5-f143-46cd-ad39-3f762a512e30\",\n \"relatedContactInformation\": [\n {\n \"number\": \"111 222 333\",\n \"emailAddress\": \"productOrderContact@example.com\",\n \"role\": \"productOrderContact\",\n \"organization\": \"MEF\",\n \"name\": \"Joe Order\"\n },\n {\n \"number\": \"111222333\",\n \"emailAddress\": \"orderseller@example.com\",\n \"role\": \"sellerContact\",\n \"name\": \"OrderSeller\"\n }\n ],\n \"productOrderItem\": [\n {\n \"product\": {\n \"id\": \"681a749da2523f4db645afc2\"\n },\n \"action\": \"delete\",\n \"id\": \"ACCESS_E_LINE\"\n }\n ],\n \"state\": \"acknowledged\",\n \"orderId\": \"681a749da2523f4db645afc2\"\n}\n```\n\nYou could keep querying order detail by order id to get latest order status, once the delete order is in complete state, the Access Eline product should be in terminated state.\n\n", + "x-displayName": "Order Access Eline (Port To Port L2 Connection)" + }, + { + "name": "Geographic Address Management", + "description": "Geographic Address Management" + }, + { + "name": "Quote Management", + "description": "Quote Management" + }, + { + "name": "Product Order Management", + "description": "Product Order Management" + }, + { + "name": "Product Inventory Management", + "description": "Product Inventory Management" + } + ], + "x-tagGroups": [ + { + "name": "Getting Started", + "tags": [ + "Ordering_Ports_Guide", + "L2_Connection", + "IoD_Guideline", + "CloudRouter_Guide", + "Pricing_Ports_Connection", + "Pricing_IoD", + "Manage_Company" + ] + }, + { + "name": "API Specification", + "tags": [ + "Auth", + "Agreements", + "Search", + "Pricing", + "Metros", + "Data Center Facilities (DCFs)", + "Port Orders", + "Ports", + "Edge Ports", + "Edge Ports (Admin)", + "Layer 2 Connections", + "Alibaba Cloud", + "Anti-DDoS", + "AWS Direct Connect", + "Vultr Cloud", + "Oracle FastConnect", + "Tencent Cloud", + "Huawei Cloud", + "Azure ExpressRoute", + "Google Cloud Engine", + "IBM Cloud Direct Link", + "OVHCloud", + "Internet On-Demand (IO-D)", + "ASNs", + "Search", + "CloudRouter", + "Group IBM VM", + "Group Console Core", + "Entitlements", + "Companies", + "Users", + "Support Tickets", + "Heartbeat", + "Internet of Things (IoT)", + "Billing Account Shield", + "Billing Account Console", + "Billing Entity Shield", + "Subscription Product Mapping Shield", + "Insight Subscription Detail Shield", + "Edge SIM" + ] + }, + { + "name": "MEF Sonata", + "tags": [ + "Introduction", + "Authentication", + "Order_UNI_GUIDE", + "Order_ELINE_GUIDE", + "Geographic Address Management", + "Quote Management", + "Product Order Management", + "Product Inventory Management" + ] + }, + { + "name": "Regulatory Checks", + "tags": ["Regulatory Checks"] + } + ] +} diff --git a/src/app.ts b/src/app.ts index 3f31999..d2dfb9b 100644 --- a/src/app.ts +++ b/src/app.ts @@ -20,6 +20,8 @@ import pinoHttp from "pino-http"; import { Request as ExpressReq, Response as ExpressRes } from "express"; import { setStartTime, heartbeat } from "./handlers/heartbeat"; import pino from "pino"; +import { createOrder } from "./handlers/mef-order"; +import { createQuote } from "./handlers/mef-quote"; export const createApp = async ( log?: pino.Logger, @@ -39,9 +41,16 @@ export const createApp = async ( app.use("/", express.static("static")); + // if QUICK is true, will skip the validation, default value is false + const quick = process.env["QUICK"]; + const quickBool = !(quick === "true" || quick === "false") + ? false + : Boolean(quick); + const api = new OpenAPIBackend({ definition: process.env["SPEC_FILE"] ?? "./specs/moddedccapi_20240906.json", strict: false, + quick: quickBool, handlers: { validationFail: async (c, req: ExpressReq, res: ExpressRes) => res.status(400).json({ err: c.validation.errors }), @@ -66,6 +75,8 @@ export const createApp = async ( */ api.register({ Heartbeat: heartbeat, + createProductOrder: createOrder, + createQuote: createQuote, }); await api.init(); diff --git a/src/handlers/mef-order.test.ts b/src/handlers/mef-order.test.ts new file mode 100644 index 0000000..33a3934 --- /dev/null +++ b/src/handlers/mef-order.test.ts @@ -0,0 +1,82 @@ +import { createApp } from "../app"; +import request from "supertest"; +import express from "express"; + +describe("request to mef order api", () => { + let app: express.Express; + + beforeAll(async () => { + process.env["SPEC_FILE"] = "./specs/mef-api.json"; + process.env["QUICK"] = "true"; + app = await createApp(); + }); + + it("should return create UNI order example", async () => { + const requestBody = { + productOrderItem: [ + { + action: "add", + product: { + productConfiguration: { + "@type": "UNI", + }, + }, + }, + ], + }; + const result = await request(app) + .post("/mefApi/sonata/productOrderingManagement/v10/productOrder") + .send(requestBody); + expect(result.status).toBe(201); + const data = result.body; + expect(data.productOrderItem).toHaveLength(1); + expect(data.productOrderItem[0].action).toBe("add"); + expect( + data.productOrderItem[0]["product"]["productConfiguration"]["@type"], + ).toBe("UNI"); + }); + + it("should return create Eline order example", async () => { + const requestBody = { + productOrderItem: [ + { + action: "add", + product: { + productConfiguration: { + "@type": "ACCESS_E_LINE", + }, + }, + }, + ], + }; + const result = await request(app) + .post("/mefApi/sonata/productOrderingManagement/v10/productOrder") + .send(requestBody); + expect(result.status).toBe(201); + const data = result.body; + expect(data.productOrderItem).toHaveLength(1); + expect(data.productOrderItem[0].action).toBe("add"); + expect( + data.productOrderItem[0]["product"]["productConfiguration"]["@type"], + ).toBe("ACCESS_E_LINE"); + }); + + it("should return 422 example", async () => { + const requestBody = { + productOrderItem: [ + { + action: "add", + product: { + productConfiguration: { + "@type": "ELINE", + }, + }, + }, + ], + }; + const result = await request(app) + .post("/mefApi/sonata/productOrderingManagement/v10/productOrder") + .send(requestBody); + expect(result.status).toBe(422); + }); +}); diff --git a/src/handlers/mef-order.ts b/src/handlers/mef-order.ts new file mode 100644 index 0000000..7343687 --- /dev/null +++ b/src/handlers/mef-order.ts @@ -0,0 +1,67 @@ +import { Context } from "openapi-backend"; +import { Request, Response } from "express"; + +const UNI_TYPE = "UNI"; +const ELINE_TYPE = "ACCESS_E_LINE"; +const ADD_ACTION = "add"; +const DELETE_ACTION = "delete"; +type OrderPayload = { + productOrderItem: [ + { + product: { + productConfiguration: { + "@type": string; + }; + }; + action: string; + id: string; + }, + ]; +}; +export function createOrder(_c: Context, _req: Request, res: Response) { + try { + const requestPayload = _req.body as OrderPayload; + const productItem = requestPayload["productOrderItem"][0]; + const action = productItem.action; + let type; + if (DELETE_ACTION == action) { + type = productItem.id; + } else { + type = productItem.product.productConfiguration["@type"]; + } + if (action === ADD_ACTION && type === UNI_TYPE) { + return mockResponseForSpecifiedCase(_c, res, "UNI-ADD-Order"); + } else if (action === ADD_ACTION && type === ELINE_TYPE) { + return mockResponseForSpecifiedCase(_c, res, "Eline-ADD-Order"); + } else if (action === DELETE_ACTION && type === UNI_TYPE) { + return mockResponseForSpecifiedCase(_c, res, "UNI-Delete-Order"); + } else if (action === DELETE_ACTION && type === ELINE_TYPE) { + return mockResponseForSpecifiedCase(_c, res, "Eline-Delete-Order"); + } else { + return mock400Response(res); + } + } catch (e) { + const err = e as Error; + return mock400Response(res, err.message); + } +} + +function mockResponseForSpecifiedCase( + _c: Context, + res: Response, + example: string, +) { + const mockData = _c.api.mockResponseForOperation("createProductOrder", { + code: 201, + example: example, + }); + return res.status(mockData.status).json(mockData.mock); +} + +function mock400Response(res: Response, reason?: string) { + return res.status(422).json({ + code: "invalidBody", + reason: reason ?? "api use case is not supported", + message: "api use case is not supported", + }); +} diff --git a/src/handlers/mef-quote.test.ts b/src/handlers/mef-quote.test.ts new file mode 100644 index 0000000..cb52962 --- /dev/null +++ b/src/handlers/mef-quote.test.ts @@ -0,0 +1,85 @@ +import express from "express"; +import { createApp } from "../app"; +import request from "supertest"; + +describe("request to mef quote api", () => { + let app: express.Express; + + beforeAll(async () => { + process.env["SPEC_FILE"] = "./specs/mef-api.json"; + process.env["QUICK"] = "true"; + app = await createApp(); + }); + + it("should return create QUOTE order example", async () => { + const requestBody = { + instantSyncQuote: true, + quoteItem: [ + { + action: "add", + product: { + productConfiguration: { + "@type": "UNI", + }, + }, + }, + ], + }; + const result = await request(app) + .post("/mefApi/sonata/quoteManagement/v8/quote") + .send(requestBody); + expect(result.status).toBe(201); + const data = result.body; + expect(data.quoteItem).toHaveLength(1); + expect(data.quoteItem[0].action).toBe("add"); + expect(data.quoteItem[0]["product"]["productConfiguration"]["@type"]).toBe( + "UNI", + ); + }); + + it("should return create Eline order example", async () => { + const requestBody = { + instantSyncQuote: true, + quoteItem: [ + { + action: "add", + product: { + productConfiguration: { + "@type": "ACCESS_E_LINE", + }, + }, + }, + ], + }; + const result = await request(app) + .post("/mefApi/sonata/quoteManagement/v8/quote") + .send(requestBody); + expect(result.status).toBe(201); + const data = result.body; + expect(data.quoteItem).toHaveLength(1); + expect(data.quoteItem[0].action).toBe("add"); + expect(data.quoteItem[0]["product"]["productConfiguration"]["@type"]).toBe( + "ACCESS_E_LINE", + ); + }); + + it("should return 422 example if passing wrong type", async () => { + const requestBody = { + instantSyncQuote: true, + quoteItem: [ + { + action: "add", + product: { + productConfiguration: { + "@type": "ELINE", + }, + }, + }, + ], + }; + const result = await request(app) + .post("/mefApi/sonata/quoteManagement/v8/quote") + .send(requestBody); + expect(result.status).toBe(422); + }); +}); diff --git a/src/handlers/mef-quote.ts b/src/handlers/mef-quote.ts new file mode 100644 index 0000000..8e3cecc --- /dev/null +++ b/src/handlers/mef-quote.ts @@ -0,0 +1,60 @@ +import { Context } from "openapi-backend"; +import { Request, Response } from "express"; + +const UNI_TYPE = "UNI"; +const ELINE_TYPE = "ACCESS_E_LINE"; +const ADD_ACTION = "add"; +type QuotePayload = { + instantSyncQuote: boolean; + quoteItem: [ + { + product: { + productConfiguration: { + "@type": string; + }; + }; + action: string; + }, + ]; +}; +export function createQuote(_c: Context, _req: Request, res: Response) { + try { + const quoteRequest = _req.body as QuotePayload; + const quoteItem = quoteRequest["quoteItem"][0]; + const action = quoteItem.action; + const type = quoteItem.product.productConfiguration["@type"]; + const syncQuote = quoteRequest.instantSyncQuote; + if (syncQuote && action === ADD_ACTION) { + if (type === UNI_TYPE) { + return mockResponseForSpecifiedCase(_c, res, "UNI-Quote"); + } else if (type === ELINE_TYPE) { + return mockResponseForSpecifiedCase(_c, res, "Eline-Quote"); + } + } + return mock400Response(res); + } catch (e) { + const err = e as Error; + return mock400Response(res, err.message); + } +} + +function mockResponseForSpecifiedCase( + _c: Context, + res: Response, + example: string, +) { + const mockData = _c.api.mockResponseForOperation("createQuote", { + code: 201, + example: example, + }); + + return res.status(mockData.status).json(mockData.mock); +} + +function mock400Response(res: Response, reason?: string) { + return res.status(422).json({ + code: "invalidBody", + reason: reason ?? "api use case is not supported", + message: "api use case is not supported", + }); +} diff --git a/yarn.lock b/yarn.lock index c16baa0..bf87caa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -36,6 +36,17 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/code-frame@npm:7.27.1" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.27.1" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.1.1" + checksum: 10/721b8a6e360a1fa0f1c9fe7351ae6c874828e119183688b533c477aa378f1010f37cc9afbfc4722c686d1f5cdd00da02eab4ba7278a0c504fa0d7a321dcd4fdf + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.25.7": version: 7.25.7 resolution: "@babel/compat-data@npm:7.25.7" @@ -139,6 +150,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 10/0ae29cc2005084abdae2966afdb86ed14d41c9c37db02c3693d5022fba9f5d59b011d039380b8e537c34daf117c549f52b452398f576e908fb9db3c7abbb3a00 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.25.7": version: 7.25.7 resolution: "@babel/helper-validator-identifier@npm:7.25.7" @@ -146,6 +164,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-identifier@npm:7.27.1" + checksum: 10/75041904d21bdc0cd3b07a8ac90b11d64cd3c881e89cb936fa80edd734bf23c35e6bd1312611e8574c4eab1f3af0f63e8a5894f4699e9cfdf70c06fcf4252320 + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.25.7": version: 7.25.7 resolution: "@babel/helper-validator-option@npm:7.25.7" @@ -153,13 +178,13 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helpers@npm:7.25.7" +"@babel/helpers@npm:7.26.10": + version: 7.26.10 + resolution: "@babel/helpers@npm:7.26.10" dependencies: - "@babel/template": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10/2632909f83aa99e8b0da4e10e5ab7fc4f0274e6497bb0f17071e004e037d25e4a595583620261dc21410a526fb32b4f7063c3e15e60ed7890a6f9b8ad52312c5 + "@babel/template": "npm:^7.26.9" + "@babel/types": "npm:^7.26.10" + checksum: 10/664146257974ccf064b42bd99b1b85717cce2bcebc5068273e13b230ee8bd98d87187c3783706758d76b678ebe0d2f48150eaa6cffc4f77af1342a78ec1cf57a languageName: node linkType: hard @@ -186,6 +211,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.27.2": + version: 7.27.5 + resolution: "@babel/parser@npm:7.27.5" + dependencies: + "@babel/types": "npm:^7.27.3" + bin: + parser: ./bin/babel-parser.js + checksum: 10/0ad671be7994dba7d31ec771bd70ea5090aa34faf73e93b1b072e3c0a704ab69f4a7a68ebfb9d6a7fa455e0aa03dfa65619c4df6bae1cf327cba925b1d233fc4 + languageName: node + linkType: hard + "@babel/plugin-syntax-async-generators@npm:^7.8.4": version: 7.8.4 resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" @@ -373,12 +409,12 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.21.0": - version: 7.25.7 - resolution: "@babel/runtime@npm:7.25.7" +"@babel/runtime@npm:7.26.10": + version: 7.26.10 + resolution: "@babel/runtime@npm:7.26.10" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: 10/73411fe0f1bff3a962586cef05b30f49e554b6563767e6d84f7d79d605b2c20e7fc3df291a3aebef69043181a8f893afdab9e6672557a5c2d08b9377d6f678cd + checksum: 10/9d7ff8e96abe3791047c1138789c742411e3ef19c4d7ca18ce916f83cec92c06ec5dc64401759f6dd1e377cf8a01bbd2c62e033eb7550f435cf6579768d0d4a5 languageName: node linkType: hard @@ -393,6 +429,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.26.9": + version: 7.27.2 + resolution: "@babel/template@npm:7.27.2" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.2" + "@babel/types": "npm:^7.27.1" + checksum: 10/fed15a84beb0b9340e5f81566600dbee5eccd92e4b9cc42a944359b1aa1082373391d9d5fc3656981dff27233ec935d0bc96453cf507f60a4b079463999244d8 + languageName: node + linkType: hard + "@babel/traverse@npm:^7.25.7": version: 7.25.7 resolution: "@babel/traverse@npm:7.25.7" @@ -419,6 +466,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.26.10, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3": + version: 7.27.6 + resolution: "@babel/types@npm:7.27.6" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + checksum: 10/174741c667775680628a09117828bbeffb35ea543f59bf80649d0d60672f7815a0740ddece3cca87516199033a039166a6936434131fce2b6a820227e64f91ae + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -1785,14 +1842,14 @@ __metadata: languageName: node linkType: hard -"axios@npm:^1.7.7": - version: 1.7.7 - resolution: "axios@npm:1.7.7" +"axios@npm:^1.8.2": + version: 1.10.0 + resolution: "axios@npm:1.10.0" dependencies: follow-redirects: "npm:^1.15.6" form-data: "npm:^4.0.0" proxy-from-env: "npm:^1.1.0" - checksum: 10/7f875ea13b9298cd7b40fd09985209f7a38d38321f1118c701520939de2f113c4ba137832fe8e3f811f99a38e12c8225481011023209a77b0c0641270e20cde1 + checksum: 10/d43c80316a45611fd395743e15d16ea69a95f2b7f7095f2bb12cb78f9ca0a905194a02e52a3bf4e0db9f85fd1186d6c690410644c10ecd8bb0a468e57c2040e4 languageName: node linkType: hard @@ -2082,7 +2139,7 @@ __metadata: "@types/source-map-support": "npm:^0" "@types/supertest": "npm:^6.0.2" "@types/wait-on": "npm:^5.3.4" - axios: "npm:^1.7.7" + axios: "npm:^1.8.2" axios-mock-adapter: "npm:^1.22.0" concurrently: "npm:^8.2.2" date-fns: "npm:^4.1.0" @@ -2110,7 +2167,7 @@ __metadata: tsconfig-paths: "npm:^4.2.0" typescript: "npm:~5.5.4" typescript-eslint: "npm:^8.13.0" - wait-on: "npm:^8.0.1" + wait-on: "npm:^8.0.3" languageName: unknown linkType: soft @@ -2404,14 +2461,14 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" +"cross-spawn@npm:7.0.5": + version: 7.0.5 + resolution: "cross-spawn@npm:7.0.5" dependencies: path-key: "npm:^3.1.0" shebang-command: "npm:^2.0.0" which: "npm:^2.0.1" - checksum: 10/e1a13869d2f57d974de0d9ef7acbf69dc6937db20b918525a01dacb5032129bd552d290d886d981e99f1b624cb03657084cc87bd40f115c07ecf376821c729ce + checksum: 10/c95062469d4bdbc1f099454d01c0e77177a3733012d41bf907a71eb8d22d2add43b5adf6a0a14ef4e7feaf804082714d6c262ef4557a1c480b86786c120d18e2 languageName: node linkType: hard @@ -5256,10 +5313,10 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:0.1.10": - version: 0.1.10 - resolution: "path-to-regexp@npm:0.1.10" - checksum: 10/894e31f1b20e592732a87db61fff5b95c892a3fe430f9ab18455ebe69ee88ef86f8eb49912e261f9926fc53da9f93b46521523e33aefd9cb0a7b0d85d7096006 +"path-to-regexp@npm:0.1.12": + version: 0.1.12 + resolution: "path-to-regexp@npm:0.1.12" + checksum: 10/2e30f6a0144679c1f95c98e166b96e6acd1e72be9417830fefc8de7ac1992147eb9a4c7acaa59119fb1b3c34eec393b2129ef27e24b2054a3906fc4fb0d1398e languageName: node linkType: hard @@ -5270,6 +5327,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10/e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 + languageName: node + linkType: hard + "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -5671,6 +5735,15 @@ __metadata: languageName: node linkType: hard +"rxjs@npm:^7.8.2": + version: 7.8.2 + resolution: "rxjs@npm:7.8.2" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10/03dff09191356b2b87d94fbc1e97c4e9eb3c09d4452399dddd451b09c2f1ba8d56925a40af114282d7bc0c6fe7514a2236ca09f903cf70e4bbf156650dddb49d + languageName: node + linkType: hard + "safe-buffer@npm:5.2.1, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" @@ -6507,18 +6580,18 @@ __metadata: languageName: node linkType: hard -"wait-on@npm:^8.0.1": - version: 8.0.1 - resolution: "wait-on@npm:8.0.1" +"wait-on@npm:^8.0.3": + version: 8.0.3 + resolution: "wait-on@npm:8.0.3" dependencies: - axios: "npm:^1.7.7" + axios: "npm:^1.8.2" joi: "npm:^17.13.3" lodash: "npm:^4.17.21" minimist: "npm:^1.2.8" - rxjs: "npm:^7.8.1" + rxjs: "npm:^7.8.2" bin: wait-on: bin/wait-on - checksum: 10/41f933031b994718dfb50af35bb843f7f7017d601ef22927e92c211736fadd21808fdbf7ae367e998bcaf995cb9c05cf6160552dc655db9082aeecc346bc926d + checksum: 10/7669a2c876bc3f188f8692adfb836576359adfaea1aa233271fc2c33b422625870e1dce06b64d7122681c5eb30b38a938a11fad07ef7992e6e9669aa7d9a2a1b languageName: node linkType: hard