Console Connect API (1.2.0)

Download OpenAPI specification:Download

Console Connect Support: support@consoleconnect.com License: Commercial Terms of Service

This document provides an API reference, grouped by function, describing how to use the Console Connect REST API. Products available through the Console Connect API include:

  • 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.
  • 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.
  • 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.
  • 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.

Getting Started

This section aims to furnish a comprehensive guide for integrating the Console Connect API into your client system. It includes detailed steps and declarative code samples that demonstrate the process of configuring a client to provision Console Connect Services.

Prerequisite

The following requirements must be met to execute the provided code samples in this guideline:

  1. API Key - Contact the Console Connect Support team to request for an API Key Email: support@consoleconnect.com
  2. Access Rights - User must have role: Network Admin/NETWORKCONTROL. You may verify your role here
  3. Acceptance of Agreement - API users must sign the Specific Terms for API Use.

Acquiring User Details

The 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

Info

Below is a sample curl command that will respond with the detailed information of the current authenticated user when executed.

curl -X GET https://api.consoleconnect.com/api/auth/token\
    -H "Authorization: Bearer [[API key]]"

If the request was successful, it will respond with a JSON object similar to this:

{
  "id": "xxxxxxxxxxxxxxxxxxxxxxxxxx",
   "companies": [
        {
            "id": "xxxxxxxxxxxxxxxxxxxxxxxxxx",
            "name": "Demo",
            "username": "demo",
            // other properties...
        }
    ]
    // other properties...
}

Info

Refer to Get Current User to see API's full response payload.

Take note of your user id (id), company id (companies[0].id), and company username (companies[0].username).

Listing Metro for a Company

This endpoint returns a list of Metros a given Company has a presence at.

Info

Below is a sample curl command that accepts company username as path parameter, see List Metros for a Company for details.

curl -X GET https://api.consoleconnect.com/api/company/${companyUsername}/metro/capabilities`\
    -H "Authorization: Bearer [[API key]]"
If the request was successful, it will respond with a detailed list of metros a given Company has a presence at.
{
  "results": [
    {
      "name": "New York",
      "code": "NYC",
      "country": "us",
      "rir": "ARIN",
      "regionIds": [
        "xxxxxxxxxxxxxxxxxxxxxxxx"
      ],
      "id": "xxxxxxxxxxxxxxxxxxxxxxxx",
      "deletedAt": null,
      "createdAt": "2017-12-18T00:27:37.028Z",
      "updatedAt": "2020-07-10T04:03:37.956Z",
      "logo": null,
      "description": "Sample description",
      "ready": true,
      "canCreateController": false,
      "deleted": false,
      "tags": [],
      "capabilities": {
        "layer2": true
      },
      "firstDataCenterFacilityIdInMetro": "xxxxxxxxxxxxxxxxxxxxxxxx"
    }
  ]
}

Info

Take note of metro ID ([0].id)

Searching DCFs

This endpoint provides DCF filtering capability and it returns a list of Data Center Facilities (DCF) details.

Info

Below is a sample curl command that accepts (optional) criteria, page & page size query parameters.

curl -X GET "https://api.consoleconnect.com/v2/data-center-facility/search?criteria={}&page=1&pageSize=10"`\
    -H "Authorization: Bearer [[API key]]"
If the request was successful, it will respond with a detailed list of DCFs.
[{
  "company": {
    "privacy": {
      "network": {
        "mode": "PUBLIC",
        "blackListIds": [],
        "whiteListIds": []
      },
      "community": {
        "mode": "PUBLIC",
        "blackListIds": [],
        "whiteListIds": []
      }
    },
    "addresses": [
      {
        "registered": false,
        "address": "",
        "city": "Hong Kong",
        "state": "",
        "zip": "zipcode",
        "country": "HK",
        "email": null,
        "phone": null,
        "geo": {
          "type": "Point",
          "coordinates": []
        }
      }
    ],
    "parentIds": [],
    "regionalInternetRegistry": [],
    "businessRegistrationCertVerified": "UNVERIFIED",
    "website": "http://www.company.com1",
    "emailDomains": [],
    "industry": "",
    "businessDevelopmentManagerTypePreference": "UNSPECIFIED",
    "isIoTDemoCompany": false
  },
  "username": "DCF_COMPANY_USERNAME",
  "name": "SAMPLE-DCF-NAME",
  "tags": [
    "offnet",
    "monthly-ports"
  ],
  "dataCenterFacility": {
    "airportCodes": [],
    "speeds": [],
    "metroId": "xxxxxxxxxxxxxxxxxxxxxxxx",
    "ready": true,
    "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "nniReady": true,
    "brandId": null,
    "canBundleCrossConnect": false
  },
  "stats": {
    "members": 0,
    "interconnections": 0,
    "followers": 5,
    "following": 0,
    "privateArticles": 0,
    "privateEvents": 0,
    "privatePosts": 0,
    "articles": 0,
    "events": 0,
    "posts": 0
  },
  "provider": [
    "PCCWGLOBAL"
  ],
  "selectiveQinQTunnelProvider": [],
  "externalId": null,
  "destinationPortOnly": false,
  "verified": true,
  "nnis": null,
  "id": "xxxxxxxxxxxxxxxxxxxxxxxx",
  "bundleCrossConnectChargeId": null,
  "deletedAt": null,
  "createdAt": "2018-02-20T04:49:09.604Z",
  "updatedAt": "2024-07-10T04:22:15.894Z",
  "products": [
    {
      "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "companyId": null,
      "dataCenterFacilityId": "xxxxxxxxxxxxxxxxxxxxxxxx",
      "slug": null,
      "status": "PUBLISHED",
      "transactionType": "ENQUIRE",
      "productType": "Data centers",
      "promoted": true,
      "name": "Sample Product Name",
      "headline": "Sample Headline",
      "description": "Demo description",
      "logo": null,
      "overviewImage": null,
      "background": null,
      "categories": [
        "Data Center"
      ],
      "tags": null,
      "promoTitle": "Sample Title",
      "promoHeadline": "Sample Headline",
      "callToActionLabel": "Order rack",
      "callToActionLink": null,
      "vendorUrl": null,
      "hubspotFormId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "productFamilyId": null,
      "isAddon": false,
      "productCode": null,
      "created_at": "2021-02-16T04:18:06.026Z",
      "updated_at": "2021-05-19T06:43:38.193Z"
    }
  ],
  "isFollowing": false
}]

Info

Take note of DCF company username ([0].username) and DCF ID ([0].id)

ASNs

This section provides a detailed guide for integrating the Console Connect ASNs API.

Listing Verified ASN Linked to a Company

This endpoint returns a list of ASNs for a specific company

Info

Below is a sample curl command that accepts company ID as path parameter, and an optional filter query parameter. The below example lists all VERIFIED and public ASNs for a company with the specified companyId.

curl -X GET https://api.consoleconnect.com/app-user/${companyId}/asns?filter={"where":{"status":"VERIFIED","private":false}}`\
    -H "Authorization: Bearer [[API key]]"
If the request was successful, it will respond with a detailed list of ASNs.
[
  {
    "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": "[object Object]",
    "company_id": "xxxxxxxxxxxxxxxxxxxxxxxx",
    "deleted_at": null,
    "created_at": "2021-08-24T00:29:51.456Z",
    "updated_at": "2024-08-02T00:27:08.040Z"
  }
]

Getting Private ASNs Range

This endpoint returns a range of private ASNs

Info

Below is a sample curl command.

curl -X GET https://api.consoleconnect.com/api/private-asn/range`\
    -H "Authorization: Bearer [[API key]]"

If the request was successful, it will respond with a range of ASNs similar to the JSON object below

{
"start": 4200000000,
"end": 4294967294
}

Pricing

This section provides a comprehensive guide for integrating the Console Connect Price Calculator API into your client system. It also provides a detailed explanation of the API's behavior, attributes and properties of the resulting API response.

Pricing - Ports and Connections

This endpoint calculates ports and layer 2 connections, it accepts an array of ports and connections as request body payload and responds with calculation details based on the provided payload.

Request Attributes

Below is a detailed description of each request attributes for this API service.

  • Ports ports - An array of port details and configuration.

    • DCF dcf - The Data Center Facility ID where will be located in.

    Note:

    You may refer to Searching DCFs to obtain the dcfId of your DCF choice.

    • Speed speed - The desired speed of the port in Mbps.
    • Duration unit durationUnit - Set to m if the Data Center accepts month-to-month port orders.
      Enum: y or m
      Default: y
  • Connections connections - An array of layer 2 connection configuration to get pricing for.

    • Bandwidth bandwidth - The desired bandwidth of the connection in Mbps.

    • Class of Service classOfService - The class of service

    • Duration duration - The duration details.

      • Value value - The desired duration for this service.
      • Unit unit - The unit of the provided duration value. Enum: day (d), week (w), month (m), year (y)

      Info

      durationUnit Enum values: day (d), week (w), month (m), year (y)

      Note:

      Maximum duration value by units: days:6 | weeks:3 | months:36 | years:3

    • Source DCF srcDcf - The ID of the source (A-end) Data Center Facility

    Note:

    You may refer to Searching DCFs to obtain the dcfId of your DCF choice.

    • Source Region srcRegion - The ID of the source (A-end) region. (Optional)

    • Destination DCF destDcf - The ID of the destination (Z-end) Data Center Facility.

    Note:

    You may refer to Searching DCFs to obtain the dcfId of your DCF choice.

    • Destination Region destRegion - The ID of the destination (Z-end) region. (Optional)
  • Discount Code discountCode - Promotional or partner code.

  • Include Cross Connect includeCrossConnect - Set to true if your DCF supports cross connect add-on.

Note:

Only available in a 12 months contract.

See below sample curl command:

curl -X POST https://api.consoleconnect.com/api/pricing/calculate`\
   -H "Authorization: Bearer [[API key]]"
   --data-raw '{
    "ports": [
      {
        "dcf: "xxxxxxxxxxxxxxxxxxxxxxxx",
        "speed": 1000,
        "duration": "y"
      }
    ]
   }' 

Note:

For more request payload examples, refer to Ports and Connections API specs.

If the request was successful, it will respond with list/array of ports or connection pricing details:

{
  "results": [
    {
      "type": "PORT",
      "entity": {
        "dcf": {
          "id": "xxxxxxxxxxxxxxxxxxxxxxxx",
          "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": []
      }
    }
  ]
}

Note:

To see the response attributes definition, refer to Ports and Connections API specs, under the Responses Section.

Internet On-Demand Pricing - Company & Port

This endpoint 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 configuration provided.

Request Attributes

Below is a detailed description of each request attributes for this API service.

  • Company ID companyId - Your company ID.

Note:

You may refer to Acquiring User Details to obtain your company ID.

  • Port ID portId - Your port ID.

Note:

You may refer to Listing Ports for a Specific Company to obtain your port ID.

  • Bandwidth bandwidth - The desired bandwidth or rate limit (in Mbps) for the IO-D service.
  • Duration value durationValue - The desired duration value
  • Duration unit durationUnit - The desired duration unit

Info

durationUnit Enum values: day (d), week (w), month (m), year (y)

Note:

Maximum duration value by units: days:6 | weeks:3 | months:36 | years:3

See below sample curl command, configured with a duration of 6 days:

curl -X GET "https://api.test.consoleconnect.com/v2/pricing/gia/byCompanyAndPort?companyId=xxxxxxxxxxxxxxxxxxxxxxxx&portId=xxxxxxxxxxxxxxxxxxxxxxxx&bandwidth=10&durationValue=6&durationUnit=d"`\
    -H "Authorization: Bearer [[API key]]"

Note

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 Response Attributes for more details.

See sample response for the pricing details below:

  { 
    "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
    }
  }

Internet On-Demand Pricing by DCF

This endpoint 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.

Request Attributes

Below is a detailed description of each request attributes for this API service.

  • Company ID dcfId - Data Center Facility (DCF) ID.

Note:

you may refer to Searching DCFs to obtain the dcfId of your DCF choice.

  • Bandwidth bandwidth - The desired bandwidth or rate limit (in Mbps) for the IO-D service.
  • Duration value durationValue - The desired duration value
  • Duration unit durationUnit - The desired duration unit

Info

durationUnit Enum values: day (d), week (w), month (m), year (y)

Note:

Maximum duration value by units: days:6 | weeks:3 | months:36 | years:3

See below sample curl command, configured with a duration of more than a month:

curl -X GET "https://api.test.consoleconnect.com/v2/pricing/gia/byDcf?dcfId=xxxxxxxxxxxxxxxxxxxxxxxx&bandwidth=10&durationValue=2&durationUnit=y"`\
    -H "Authorization: Bearer [[API key]]"

Note

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 Response Attributes for more details.

See sample response for the pricing details below:

{
  "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": "y",
    "value": 2
  }
}

Internet On-Demand Pricing by DCF (Bulk)

This 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 request (priceRequests) configuration provided in the API request.

Request Attributes

Below is a detailed description of each request attributes for this API service.

  • DCF ID dcfId - Your data center facility (DCF) of choice ID.

Note:

you may refer to Searching DCFs to obtain your dcfId

  • Price Requests priceRequests - A collection of different IO-D service configuration (bandwidth and duration) you desire to configure your IO-D service with.

    Price Requests item's attributes/fields:

    • Bandwidth bandwidth - The desired bandwidth or rate limit (in Mbps) for the IO-D service.
    • Duration value durationValue - The desired duration value
    • Duration unit durationUnit - The desired duration unit

    Info

    durationUnit Enum values: day (d), week (w), month (m), year (y)

    Note:

    Maximum duration value by units: days:6 | weeks:3 | months:36 | years:3

See below sample curl command, which passes 2 IO-D configuration items in price requests (priceRequests) query parameter:

  • Index 0 - Configured with service duration of more than a month.
  • Index 1 - Configured with service duration of less than a month.
curl -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"}]"`\
    -H "Authorization: Bearer [[API key]]"

Note

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.

The 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 Response Attributes section below for the response details.

See sample response for the pricing details below.
[
  { // Recurring - with duration of more than a month
    "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 - with duration of less than a month
    "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
    }
  }
]

IO-D Pricing by DCF | Company & Port | DCF (bulk) Response Attributes

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).

Recurring Response


Applicable charges for the service configured with duration of more than a month. See sample response above index 0.

Property Definition

  • contractTotals - The full duration of service charge rates.
    • giaCost - The full duration of service charge rate
    • ipCost - The IP Block selection/option - each option equivalent to full duration of service charge rate, chargeable on top of giaCost.
  • unitCosts - Equivalent to monthly service charge rates.
    • giaCost - The monthly service charge rate.
    • ipCost - The IP Block selection/option - each option equivalent to monthly service charge rate, chargeable monthly on top of giaCost.
  • contractTotalsAmountSaved - The full duration computed saved amount.
  • unitCostsAmountSaved - Computed monthly saved amount.
  • burstRate - Burst rate/Mbps charge rate.
  • duration - Configured duration of service.
    • value - The configured duration value for the service.
    • unit - The configured duration unit for the service. Enum: days (d), weeks (w), months (m), years (y).

Note:

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.

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.

OnceOff Response


Applicable charges for the service configured with duration of less than a month. See sample response above index 1.

Property Definition

  • onceOff - The full duration of service charge rate and IP Block options charge rate.
    • giaCost - The full duration of service charge rate
    • ipCost - The IP Block selection/option - each option equivalent to full duration of service charge rate, chargeable on top of giaCost.
  • burstRate - Burst rate/Mbps charge rate.
  • duration - Configured duration of service.
    • value - The configured duration value for the service.
    • unit - The configured duration unit for the service in day(s) (d) or in week(s) (w).

Ports

This section provides a detailed guide for integrating the Console Connect Port Services API through your client systems.

Listing Ports for a Specific Company

This endpoint accepts company username as a path parameter and responds with a list of ports owned by the specific company.

See below sample curl command:

curl -X GET https://api.consoleconnect.com/api/company/${companyUsername}/ports?deleted=false`\
    -H "Authorization: Bearer [[API key]]"
If the request was successful, it will respond with a detailed list of ports for the given company.
{
  "results": [
    {
      "dcpCompanyId": null,
      "name": "XXXX CONNECTIVITY",
      "speed": {
        "value": 1000,
        "name": "1000 Mbps"
      },
      "speedOverprovisioningFactor": 1,
      "singleService": false,
      "locationId": null,
      "dataCenterFacilityId": "xxxxxxxxxxxxxxxxxxxxxxxx",
      "popId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "metroId": "xxxxxxxxxxxxxxxxxxxxxxxx",
      "status": "ACTIVE",
      "serviceStatus": "OPEN",
      "linkState": "UP",
      "linkStateUpSince": null,
      "linkStateSyncedAt": "2021-06-08T01:05:03.507Z",
      "type": "NNI",
      "isEdgePort": false,
      "edgePayload": null,
      "mediaType": "COPPER",
      "partner": {
        "type": "NONE",
        "connectionSpeeds": []
      },
      "ip": {
        "ipv4": null,
        "ipv6": null
      },
      "capabilities": {
        "model6Limit": false,
        "model6LimitNumber": null,
        "singleService": false
      },
      "activeChangedAt": "2021-06-08T01:05:33.694Z",
      "firstActiveAt": "2021-06-08T01:05:03.706Z",
      "updatedAt": "2023-01-24T02:08:29.005Z",
      "createdAt": "2021-06-08T01:04:59.457Z",
      "deleted": false,
      "deletedAt": null,
      "importedAt": null,
      "importer": null,
      "salesRecordId": "123456",
      "paymentType": "plan",
      "payg": null,
      "onboarded": true,
      "onboardedBy": "xxxxxxxxxxxxxxxxxxxxxxxx",
      "onboardedAt": "2021-06-08T01:04:59.455Z",
      "onboardedStatus": "COMPLETE",
      "onboardedStatusDetail": null,
      "onboardedDeviceName": "usw01.pop01.hkg39",
      "onboardedInterfaceName": "GigabitEthernet0/0/11",
      "onboardedAllocatedBandwidth": 10,
      "billingId": "xxxxxxxxxxxxxxxxxxxxxxxx",
      "vlanRanges": [
        {
          "start": 1000,
          "end": 1010
        }
      ],
      "iciLink": "A",
      "reportingLabels": [
        "Meeting place port"
      ],
      "supportedServices": [
        "L2"
      ],
      "cosTransparency": null,
      "cosMapping": {
        "GOLD": [
          ""
        ],
        "SILVERPLUS": [],
        "SILVER": [
          ""
        ],
        "BRONZE": []
      },
      "externalId": "port-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "ticketLink": null,
      "crossConnectXcOwner": null,
      "crossConnectFullDemarc": null,
      "interconnectEnabled": null,
      "interconnectProvider": null,
      "interconnectOrderNumber": null,
      "interconnectCircuitId": null,
      "interconnectCompletedAt": null,
      "interconnectVlanRange": null,
      "interconnectNniPortName": null,
      "localLoopEnabled": null,
      "localLoopId": null,
      "localLoopCustomerId": null,
      "localLoopProviderName": null,
      "localLoopSalesRecordId": null,
      "localLoopBandwidth": null,
      "localLoopCompletedAt": null,
      "localLoopASideAddress": null,
      "localLoopASideXConnectId": null,
      "localLoopZSideAddress": null,
      "localLoopGsmpId": null,
      "id": "xxxxxxxxxxxxxxxxxxxxxxxx",
      "accessCircuit": {
        "crossConnectMediaType": null
      },
      "companyId": "xxxxxxxxxxxxxxxxxxxxxxxx",
      "capacity": {
        "total": 1000,
        "utilised": 365,
        "remaining": 635
      },
      "company": {
        "officeAddress": null,
        "system": {
          "welcomeMessage": true
        },
        "company": {
          "industry": null,
          "companySize": null,
          "dateFounded": null,
          "clientId": null,
          "first": null,
          "last": null,
          "address": null,
          "city": null,
          "state": null,
          "zip": null,
          "phone": null,
          "fax": null,
          "businessType": "Internet Exchange",
          "website": "sample.com",
          "registeredName": "updatedone2",
          "addresses": [
            {
              "geo": {
                "type": "Point",
                "coordinates": []
              },
              "primary": true,
              "registered": true,
              "address": "2 Stuart Road",
              "city": "Tegucigalpa",
              "state": "hk",
              "zip": "4000",
              "country": "HN",
              "email": null,
              "phone": "01234567891"
            }
          ],
          "partnerType": null,
          "isIoTDemoCompany": false
        },
        "cloudProviderDetails": {
          "asn": {
            "range": [
              4200099007,
              4200099009
            ]
          },
          "cloudType": "vultr",
          "companyType": "B2B",
          "bgpAuthority": "PCCWGLOBAL"
        },
        "stats": {
          "members": 186,
          "interconnections": 0,
          "followers": 0,
          "following": 0,
          "privateArticles": 0,
          "privateEvents": 0,
          "privatePosts": 0,
          "articles": 14,
          "events": 0,
          "posts": 29
        },
        "accountManagerEmail": null,
        "accountManagerId": null,
        "createdAt": "2019-08-09T05:32:18.613Z",
        "updatedAt": "2024-07-25T06:51:06.162Z",
        "username": "qe1",
        "deletedAt": null,
        "deleted": false,
        "verified": true,
        "tags": [
          "promoted"
        ],
        "status": "ACTIVE",
        "displayOrder": 0,
        "external": [
          {
            "id": "15",
            "type": "SDWAN",
            "status": "UNSYNCED"
          }
        ],
        "groups": [],
        "location": null,
        "summary": "<p>Testing adding new image12</p>",
        "headline": "wholesale",
        "background": "xxxxxxxxxxxxxxxxxxxxxxxx",
        "avatarId": "xxxxxxxxxxxxxxxxxxxxxxxx",
        "name": "SAMPLE NAME",
        "type": "COMPANY",
        "oldAvatarId": "xxxxxxxxxxxxxxxxxxxxxxxx",
        "verifiedIdentity": true,
        "portsActive": 14,
        "categories": [
          "Analytics",
          "AI",
          "IoT"
        ],
        "overviewImage": "xxxxxxxxxxxxxxxxxxxxxxxx",
        "isCloudProvider": true,
        "signedCompanyRefId": 4,
        "signedCompanyVerified": true,
        "billingAccount": "115475",
        "businessRegistrationNumber": "123456",
        "selectiveQinQTunnelProvider": [],
        "companies": [],
        "id": "xxxxxxxxxxxxxxxxxxxxxxxx",
        "online": false
      },
      "dataCenterFacility": {
        "system": {
          "welcomeMessage": null
        },
        "company": {
          "privacy": {
            "network": {
              "mode": "PUBLIC",
              "blackListIds": [],
              "whiteListIds": []
            },
            "community": {
              "mode": "PUBLIC",
              "blackListIds": [],
              "whiteListIds": []
            }
          },
          "businessType": 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": "",
              "city": "Hong Kong",
              "state": "",
              "zip": "zipcode",
              "country": "HK",
              "email": null,
              "phone": null
            }
          ],
          "regionalInternetRegistry": [],
          "businessRegistrationCertVerified": "UNVERIFIED",
          "website": "http://www.company.com1",
          "emailDomains": [],
          "industry": "",
          "businessDevelopmentManagerTypePreference": "UNSPECIFIED",
          "isIoTDemoCompany": false
        },
        "dataCenterFacility": {
          "airportCodes": [],
          "speeds": [],
          "metroId": "dataCenterFacility",
          "ready": true,
          "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "nniReady": true,
          "brandId": null,
          "canBundleCrossConnect": false
        },
        "cloudProviderDetails": {
          "asn": {
            "range": []
          },
          "bgpAuthority": "PCCWGLOBAL",
          "companyType": "DCP"
        },
        "stats": {
          "members": 0,
          "interconnections": 0,
          "followers": 5,
          "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-20T04:49:09.604Z",
        "updatedAt": "2024-07-10T04:22:15.894Z",
        "username": "hkg05",
        "deletedAt": null,
        "deleted": false,
        "verified": true,
        "tags": [
          "offnet",
          "monthly-ports"
        ],
        "status": "ACTIVE",
        "displayOrder": -299,
        "groups": [],
        "location": null,
        "summary": "",
        "headline": null,
        "background": null,
        "avatarId": null,
        "name": "hkg39-Asia-HK-APAC",
        "type": "DATA_CENTER_FACILITY",
        "popIds": [
          "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
        ],
        "costbookLocationId": "xxxxxxxxxxxxxxxxxxxxxxxx",
        "costbookLocation": {
          "name": "ASIA 1",
          "id": "xxxxxxxxxxxxxxxxxxxxxxxx",
          "deletedAt": null,
          "createdAt": "2019-05-21T04:09:32.819Z",
          "updatedAt": "2019-11-05T01:31:28.426Z",
          "tags": [
            "generated"
          ],
          "gatewayIds": [],
          "regionIds": [
            "xxxxxxxxxxxxxxxxxxxxxxxx"
          ],
          "regions": [
            {
              "name": "APAC",
              "id": "xxxxxxxxxxxxxxxxxxxxxxxx",
              "deletedAt": null,
              "createdAt": "2017-12-18T00:26:28.610Z",
              "updatedAt": "2018-09-11T04:15:10.124Z",
              "deleted": false,
              "priceMultiplier": 1,
              "insightRegion": "Asia"
            }
          ],
          "gateways": []
        },
        "verifiedIdentity": false,
        "provider": [
          "PCCWGLOBAL"
        ],
        "destinationPortOnly": false,
        "categories": [],
        "nnis": null,
        "isCloudProvider": false,
        "l3CostbookLocationId": "xxxxxxxxxxxxxxxxxxxxxxxx",
        "bundleCrossConnectChargeId": null,
        "signedCompanyVerified": false,
        "selectiveQinQTunnelProvider": [],
        "companies": [],
        "id": "xxxxxxxxxxxxxxxxxxxxxxxx",
        "online": false
      },
      "connections": [
        {
          "id": "xxxxxxxxxxxxxxxxxxxxxxxx",
          "name": "SAMPLE NAME",
          "status": "ERROR",
          "speed": 10,
          "type": "LAYER2",
          "srcConfigTag": null,
          "typeFriendly": "IBM Direct Link"
        },
        {
          "id": "xxxxxxxxxxxxxxxxxxxxxxxx",
          "name": "SAMPLE NAME2",
          "status": "ERROR",
          "speed": 10,
          "type": "LAYER2",
          "srcConfigTag": null,
          "typeFriendly": "IBM Direct Link"
        }
      ],
      "metro": {
        "name": "Hong Kong",
        "code": "HKG",
        "country": "hk",
        "rir": "APNIC",
        "regionIds": [
          "xxxxxxxxxxxxxxxxxxxxxxxx"
        ],
        "id": "xxxxxxxxxxxxxxxxxxxxxxxx",
        "deletedAt": null,
        "createdAt": "2017-12-18T00:45:44.120Z",
        "updatedAt": "2024-02-25T05:02:47.267Z",
        "logo": null,
        "description": "a",
        "ready": true,
        "canCreateController": false,
        "deleted": false,
        "tags": []
      }
    }
  ]
}

Note

Take note of your port ID (results[0].id).

Checking Port Capabilities

This endpoint provides details to a specific port's capabilities, it accepts company ID and port ID as path parameter.

See below sample curl command:

curl -X GET https://api.consoleconnect.com/app-user/${companyId}/ports/${portId}/info`\
    -H "Authorization: Bearer [[API key]]"

If the request was successful, it will respond with a JSON object similar to this:

{
  "capabilities": {
    "giaStandardV1": true,
    "l2TypeA": false,
    "l3vpnTypeA": true,
    "qinq": true
  }
}

Ordering/Reserving Ports

This section illustrates the creation of an order to reserve a port via the Console Connect API.

Info

Below is a sample curl command that will execute creation of port order, it accepts your company username as path parameter.

curl -X PUT https://api.consoleconnect.com/api/company/${companyUsername}/ports/orders`\
   -H "Authorization: Bearer [[API key]]"
   --data-raw '{
    "dataCenterFacility": "DCF_Company_Username",
    "speed": "1000",
    "durationUnit": "y",
    "portName": "SAMPLE-PORT-NAME",
    "paymentType": "invoice"
   }' 

Note

Refer to Searching DCFs above to obtain a value for dataCenterFacility request body field.

Layer 2 Connection

This section provides detailed guide on creating L2 connection through Console Connect API Service.

Creating L2 Connection (Port to Port)

This section illustrates the creation of L2 connectivity between ports through the Console Connect API Service.

S2S (Self to Self) Connection

The following example demonstrates a S2S (self-to-self) connection, 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.

Info

Below is a sample curl command that will execute the creation of L2 Connection (port to port), it accepts your company username as path parameter.

curl -X PUT https://api.consoleconnect.com/api/v2/company/${companyUsername}/connections/layer2`\
   -H "Authorization: Bearer [[API key]]"
   --data-raw '{
    "name":"DEMO-L2-S2S",
    "destCompany":"DEMO-COMPANY",
    "portId":"xxxxxxxxxxxxxxxxxxxxxxxx",
    "destPortId":"xxxxxxxxxxxxxxxxxxxxxxxx",
    "duration":12,
    "durationUnit":"m",
    "paymentType":"invoice",
    "classOfService":"SILVER",
    "speed":100,
    "type":"LAYER2",
    "evergreen":true
   }' 

Note

To obtain portId & destPortId please see "Listing Ports for a Specific Company".

B2B (Business to Business) Connection

The following example illustrates a B2B (business-to-business) connection, where 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.

Note

The following sample curl command is similar to the previous example, with the only difference being the request payload, which includes destMetroId, destDcf, destRegionId, and regionId, while excluding the destination port ID (destPortId).

curl -X PUT https://api.consoleconnect.com/api/v2/company/${companyUsername}/connections/layer2`\
   -H "Authorization: Bearer [[API key]]"
   --data-raw '{
    "name":"DEMO-L2-B2B",
    "destCompany":"DEMO-COMPANY",
    "destDcf":"xxxxxxxxxxxxxxxxxxxxxxxx",
    "destMetroId":xxxxxxxxxxxxxxxxxxxxxxxx,
    "destRegionId":xxxxxxxxxxxxxxxxxxxxxxxx,
    "portId":"xxxxxxxxxxxxxxxxxxxxxxxx",
    "regionId":"xxxxxxxxxxxxxxxxxxxxxxxx",
    "duration":1,
    "durationUnit":"y",
    "paymentType":"invoice",
    "classOfService":"SILVER",
    "speed":10,
    "type":"LAYER2",
    "evergreen":true
   }' 

Obtaining the payload for L2 Connection B2B

  1. To obtain destMetroId & destRegionId execute Listing Metros for a Company then extract metro ID (results[0].id) and region ID (results[0].regionIds[0]).
  2. To obtain destDcf execute Searching DCFs then extract destination DCF ([0].id)
  3. To obtain portId & regionId execute "Listing Ports for a Specific Company" then extract region ID (results[0].metros.regionIds[0]) and port ID (results[0].id)

Internet On-Demand

This section provides a detailed guide for integrating Console Connect Internet On-Demand (IO-D) Service with client system through Console Connect API Service.

Note

On top of the mentioned prerequisite above, please see additional requirements to perform the following action.

Provisioning Internet On-Demand (IO-D) Service

This section illustrates the provisioning of IO-D service for a specified company (through company ID) configured with a private ASN

Info

Below 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.

curl -X POST https://api.consoleconnect.com/app-user/${companyId}/gia-service`\
   -H "Authorization: Bearer [[API key]]"
   --data-raw '{
    "accessPortId": "xxxxxxxxxxxxxxxxxxxxxxxx",
    "name": "Sample IO-D Name",
    "rateLimit": 10,
    "type": "DYNAMIC",
    "privateAsn": true,
    "privateAsnAutoAssign": true,
    "ipBlock": 28,
    "enableIpv6": false,
    "autoAssignBgpKey": true,
    "defaultOriginate": true,
    "defaultOriginateIpv6": true,
    "duration": {
        "quantity": 1,
        "unit": "d"
    },
    "paymentType": "invoice",
    "ipGeoCountry": "JP",
    "ipGeoCity": ""
   }' 

Helpful Tips

  1. To validate if your port is IO-D enabled, execute Checking Port Capabilities Guideline, then if capabilities.giaStandardV1's value is true, then your port is IO-D enabled.
  2. To check your port capacity, execute Listing Ports for a Specific Company, then take note of your port's remaining capacity (results[0].capacity.remaining).
  3. Depending on a certain configuration given, certain options in the request body could be mandatory/disallowed, see Provisioning IO-D Service to see all the required request body field.
    • If type property value is DYNAMIC

      Either

      • If privateAsn property value is true

        • Must either set privateAsnAutoAssign property value to true OR set privateAsnRequested field providing your private ASN.

        Note

        A helpful endpoint is available in providing you with a range of ASNs by executing Getting Private ASN Range.

        • Must provide an ipBlock

        • If enableIpv6 property value is true

          • Must supply an ipv6Block

          Note:

          Currently the only valid value for ipv6Block is 48.

        • Must either set autoAssignBgpKey property value to true or supply a 6-24 characters long string value to bgpKey.

        • Must not set or include asnId in the request body.

      • If privateAsn property value is false

        • Must supply an ASN ID ( asnId )

        Note

        To find your public ASN ID, execute Listing Verified ASN Linked to a Company and take note of your ASN ID ([0].id).

        Note

        To add new ASN, contact Console Connect Support Team (support@consoleconnect.com) providing your ASN.

        • Must either set autoAssignBgpKey property value to true or supply a 6-24 characters long string value to bgpKey.
        • Must not set or include privateAsnRequested in the request body.
        • Must not set or include privateAsnAutoAssign in the request body.
    • If type property value is STATIC

      • Must set privateAsn property value to true.
      • Must set privateAsnAutoAssign property value to true
      • Must provide an ipBlock
        • If enableIpv6 property value is true

          • Must supply an ipv6Block

          Note:

          Currently the only valid value for ipv6Block is 48.

      • Must not set or include asnId in the request body.
      • Must not set or include privateAsnRequested in the request body.
      • Must not set or include bgpKey in the request body.
      • Must not set or include autoAssignBgpKey in the request body.
  4. Configuring burstRate involves a set of rules:
    • Committed data rate limit minimum is set at 10% of remaining port capacity.
    • Burstable bandwidth must exceed committed data rate, but not exceed remaining port capacity.
    • See Tip #2 to check your port capacity.
  5. IP prefix: Ensure any IP prefix you will advertise via BGP are registered and signed under your ASN in your regional Internet Routing Registry.

CloudRouter

This section provides a detailed guide for integrating CloudRouter Services with client systems using the Console Connect API Service.

Listing Existing CloudRouters

This is useful when acquiring data that are relevant when Provisioning a new Site on an Existing VPN

Info

Below is a sample curl command that will return an array of previously provisioned CloudRouter(if there are any) that correlates with the specified companyId.

curl -X GET https://api.consoleconnect.com/app-user/${companyId}/l3vpns`\
    -H "Authorization: Bearer [[API key]]"
If the request was successful, it will respond with a JSON object similar to this:
[
  {
    "name": "Demo",
    "status": "CREATED",
    "id": "xxxxxxxxxxxxxxxxxxxxxxxx",
    "paymentMethod": "invoice",
    "duration": {
      "quantity": 1,
      "unit": "y"
    },
    "bandwidth": "10GB",
    "companyId": "xxxxxxxxxxxxxxxxxxxxxxxx",
    "deletedAt": null,
    "createdAt": "2023-02-10T16:01:57.308Z",
    "updatedAt": "2023-06-23T07:27:21.640Z",
    "sites": [
      {
        "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "companyId": "xxxxxxxxxxxxxxxxxxxxxxxx",
        "l3vpnId": "xxxxxxxxxxxxxxxxxxxxxxxx",
        "name": "London Site",
        "type": "COMPANY",
        "portId": "xxxxxxxxxxxxxxxxxxxxxxxx",
        "slVlanId": "119",
        "rateLimit": {
          "rate": 30,
          "unit": "Mbps"
        },
        "mtu": null,
        "classOfService": [
          {
            "name": "BRONZE",
            "value": 100
          },
          {
            "name": "SILVER",
            "value": 0
          },
          {
            "name": "GOLD",
            "value": 0
          }
        ],
        "redundancySiteType": "primary",
        "redundancyLinkedSiteId": null,
        "status": "ACTIVE",
        "simPoolId": null,
        "company_id": "xxxxxxxxxxxxxxxxxxxxxxxx",
        "l3vpn_id": "xxxxxxxxxxxxxxxxxxxxxxxx",
        "sim_pool_id": null,
        "deleted_at": null,
        "created_at": "2024-04-23T06:33:22.745Z",
        "updated_at": "2024-07-21T15:34:13.201Z",
        "port_id": "xxxxxxxxxxxxxxxxxxxxxxxx",
        "peers": [
          {
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "companyId": "xxxxxxxxxxxxxxxxxxxxxxxx",
            "l3vpnSiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "slPeerUuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "type": "SELF",
            "partner": {},
            "status": "ACTIVE",
            "bgpKey": "xxxxxxxxxxxxxxxxxxxxxxxx",
            "asn": 64512,
            "externalIp": "10.51.208.110/30",
            "internalIp": "10.51.208.109/30",
            "subnet": "10.51.208.108/30",
            "defaultOriginate": false,
            "company_id": "xxxxxxxxxxxxxxxxxxxxxxxx",
            "l3vpn_site_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "deleted_at": null,
            "created_at": "2024-04-23T06:35:20.932Z",
            "updated_at": "2024-04-23T06:35:52.943Z"
          }
        ],
        "providerInfo": {
          "city": "London",
          "country": "GB",
          "countryDisplayName": "United Kingdom",
          "metroName": "London",
          "dcfName": "SAMPLE Cloud - LD8",
          "companyName": "CC API (DEMO)",
          "companyUsername": "ccapidemo",
          "portName": "SAMPLE PORT - NAME",
          "portId": "xxxxxxxxxxxxxxxxxxxxxxxx",
          "dcfId": "xxxxxxxxxxxxxxxxxxxxxxxx",
          "metroId": "xxxxxxxxxxxxxxxxxxxxxxxx",
          "companyId": "xxxxxxxxxxxxxxxxxxxxxxxx",
          "portPartner": {
            "type": "NONE",
            "connectionSpeeds": []
          }
        }
      }
    ],
    "calculatedCapacity": {
      "total": 10000,
      "used": 30,
      "remaining": 9970
    }
  }
]

Info

With this array of existing CloudRouter data we could extract the L3VPN ID ([0].sites[0].l3vpnId) from a specific cloud router's list of sites object.

Provisioning new Site on an existing VPN (CloudRouter)

This section outlines the prerequisites and provides guidelines for provisioning a new VPN site within an existing CloudRouter VPN via Console Connect API integrated in a client system.

Note

On top of the mentioned prerequisite above, please see additional requirements to perform the following action.

Info

Below is a sample curl command that will execute creation of a new site within an existing CloudRouter VPN, it accepts company ID and l3vpn ID as path parameter.

curl -X POST https://api.consoleconnect.com/app-user/${companyId}/l3vpns/${l3vpnId}/site`\
   -H "Authorization: Bearer [[API key]]"
   --data-raw '{
      "name":"SAMPLE NAME",
      "accessCircuit":{
        "classOfService":[
          {"name":"BRONZE","value":50},
          {"name":"SILVER","value":50},
          {"name":"GOLD","value":0}
        ],
        "rateLimit":{"unit":"Mbps","value":100},
        "portId":"PORT_ID"
      },
      "peer":{"type":"SELF"},
      "discountCode":""
    }'  

Note

The API execution above is an example of SELF peer type( sites created on one of your active Console Connect Ports. ), see more details here.