Provisioning IO-D

A detailed guideline for provisioning Internet On-Demand (IO-D) Service with client system through Console Connect API Service.

Prerequisite

The following requirements must be met to perform the provided code samples.

  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.
  4. Your company has been verified on the Console Connect platform.

I. Prerequisite Procedures

Similar series of steps to perform to obtain the relevant data required for provisioning IO-D Service.

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

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

Note:

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

I.II. Listing ports for your company and Checking port's remaining capacity

To list all ports owned by your company execute the following 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 (Sample: results[0].id).

Note:

Take note of your port's remaining capacity (Sample: results[0].capacity.remaining).

I.III. Validating if your port is IO-D enabled.

To obtain the details of your port capabilities execute the following 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
  }
}

Note:

If capabilities.giaStandardV1's value is true, then your port is IO-D enabled.

II. Provisioning IO-D with DYNAMIC routing type and Private ASN

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

II.I. (Optional) Getting Private ASN Suggestion

To obtain suggested Private ASN execute the following curl command:

curl -X GET https://api.consoleconnect.com/api/private-asn/suggestion`\
    -H "Authorization: Bearer <API_KEY>"

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

{
  "asn": 4200000055
}

Note:

Take note of the asn value.

Note:

You may also want to look at Get Private ASN Range to obtain an ASN range result.

II.II. Provisioning IO-D Service

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 and with DYNAMIC routing type.

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": 5,
        "unit": "d"
    },
    "paymentType": "payg",
    "ipGeoCountry": "JP",
    "ipGeoCity": ""
   }' 

Helpful Tips:

If privateAsn property value is true & type property value is DYNAMIC:

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

  • Configuring burstRate involves a set of rules:

  • IP prefix: Ensure any IP prefix you will advertise via BGP are registered and signed under your ASN in your regional Internet Routing Registry.

III. Provisioning IO-D with DYNAMIC routing type and Public ASN

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

III.I. Listing Verified ASN Linked your Company

To list all verified ASNs for your company simply execute the following curl command:

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

Note:

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

III.II. Provisioning IO-D Service

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

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": false,
    "asnId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "ipBlock": 28,
    "enableIpv6": false,
    "autoAssignBgpKey": true,
    "defaultOriginate": true,
    "defaultOriginateIpv6": true,
    "duration": {
        "quantity": 5,
        "unit": "d"
    },
    "paymentType": "payg",
    "ipGeoCountry": "JP",
    "ipGeoCity": ""
   }' 

Helpful Tips:

If privateAsn property value is false & type property value is DYNAMIC:

  • 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 a 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.
  • Configuring burstRate involves a set of rules:
  • IP prefix: Ensure any IP prefix you will advertise via BGP are registered and signed under your ASN in your regional Internet Routing Registry.

IV. Provisioning IO-D with STATIC routing type

A detailed guideline for provisioning Internet On-Demand (IO-D) Service for a specified company (through company ID) configured with STATIC routing type.

IV.I. Provisioning IO-D Service

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 and with STATIC routing type.

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": "STATIC",
    "privateAsn": false,
    "privateAsnAutoAssign": true,
    "ipBlock": 28,
    "enableIpv6": false,
    "defaultOriginate": true,
    "defaultOriginateIpv6": true,
    "duration": {
        "quantity": 5,
        "unit": "d"
    },
    "paymentType": "payg",
    "ipGeoCountry": "JP",
    "ipGeoCity": ""
   }' 

Helpful Tips:

If privateAsn property value is false & type property value is DYNAMIC:

  • 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.
  • Configuring burstRate involves a set of rules:
  • IP prefix: Ensure any IP prefix you will advertise via BGP is registered and signed under your ASN in your regional Internet Routing Registry.