Introduction

Use these endpoints to perform a service plan change.

Request Specifications

Table 1. API Versions
Version Header Changes

1 (Deprecated)

X-API-VERSION=1

Initial Version

2 (Deprecated)

X-API-VERSION=2

No change

3

X-API-VERSION=3

No change

4

X-API-VERSION=4

No change

5

X-API-VERSION=5

No change

6

X-API-VERSION=6

Optional field restorationSla added to the POST

7

X-API-VERSION=7

No change

8

X-API-VERSION=8

Contact details are mandatory when ntdOption is set

ALL

ALL

New fields added for FTTP and HFC access technologies to support September high speed plans

ALL

ALL

New contact detail fields for NTD installation have been added

API Version 6 and 7

Request Lifecycle

Changing a service’s plan and/or restoration SLA is a two step process. It allows you to do:

Plan Change

You need to pass in new Plan (price may change based on new Plan and pricing changes of current SLA)

SLA Change

You need to pass in existing Plan, new SLA (price may change based on pricing changes of current Plan and new SLA)

Plan Change plus SLA change

You need to pass in new Plan, new SLA (price may change based on new Plan and new SLA)

  1. Create a service-plan-change-request resource, by sending a POST request to /api/connect/services/plan-changes/request with the body of the request containing the serviceId, the planName , term, restorationSla (optional), ntdOption (when plan speed greater than 1000 MBit/s), and contact details if ntdOption is set. The response’s http status will be 201 with a blank response body. There will be a Location response header with a URL. This URL is where the request outcome can be obtained.

    • If contact details have not been provided for API Version < 8 when ntdOption is set, we set the Order contact details. See Example

  2. Make a GET request to the URL returned in 1. to retrieve the outcome of the request. While the request is in progress, the response’s http status will be 202. This means that the request has not finished yet, but will in a moment. If the request was successful a service-plan-change resource will be returned. If the request failed a 422 will be returned with the body containing details on why it failed in the standard error format.

POST Request

Table 2. POST Request

Verb

POST

URI

/api/connect/services/plan-changes/request

Table 3. POST HTTP Request Headers
Name Description

Authorization

The OAuth bearer access token

X-API-VERSION

The version of the endpoint you are accessing

Table 4. POST Request Body Fields
Path Type Description Required

serviceId

Number

The id of the service.

Required

planName

String

The plan name.

Required

term

Number

The plan term.

Required

restorationSla

String

The service restoration SLA

ntdOption

String

The ntd option.

Required for plans with speeds greater than 1000 MBit/s

contactName

String

Contact name for NTD installation.

Required when ntdOption is set, starting from version 8 onwards

contactPhone

String

Contact phone for NTD installation.

Required when ntdOption is set, starting from version 8 onwards

contactEmail

String

Contact email for NTD installation.

Required when ntdOption is set, starting from version 8 onwards

POST Response

Table 5. POST HTTP Status Codes
Status Code Meaning

201

The request was created successfully

401

Bearer token is missing or invalid

404

You do not have permission to perform this task

422

There are validation errors on the request you made. Check the response body to see what fields had issues.

500

There was an unexpected error processing the request

502

There was an unexpected error with one or more of the upstream services

Table 6. POST HTTP Response Headers
Name Description

Location

The URL of the service-plan-change-request resource

GET Request

Note
The URI will be given to you in the Location header of the POST request of the Service Plan Change request.
Table 7. GET Request

Verb

GET

URI

/api/connect/services/plan-changes/requests/{id}

Table 8. GET Request Path Variables

Path Variable

Purpose

id

The id of the service-plan-change-request resource to poll for completion status

Table 9. GET HTTP Request Headers
Name Description

Authorization

The OAuth bearer access token

X-API-VERSION

The version of the endpoint you are accessing

GET Response

Table 10. GET HTTP Status Codes
Status Code Meaning

200

The request is complete. The body contains the service-plan-change resource

202

The request is in progress

401

Bearer token is missing or invalid

404

You are not authorised or The id (of the service-plan-change-request resource) provided does not exist

422

The service-plan-change resource failed to be created. Check the response body to see why

500

There was an unexpected error processing the request

502

There was an unexpected error with one or more of the upstream services

Table 11. GET Response Body Fields
Path Type Description

id

Number

The Connect identifier of the plan change request resource.

serviceId

Number

The Connect identifier of the service resource.

sla

Object

Service Restoration SLA fee applied for the service plan change.

sla.sla

String

Name of the SLA.

sla.fee

Object

Applied charge for the addon type.

sla.fee.attributes

Object

Attributes of the addon type. Typically includes the sla name

sla.fee.oneTimeCharge.amount

String

One time charge of the addon type.

sla.fee.oneTimeCharge.currency

String

Currency of the addon type charge.

sla.fee.oneTimeCharge.symbol

String

Symbol of the addon type charge currency.

sla.fee.monthlyRecurringCharge.amount

String

Monthly recurring charge of the addon type.

sla.fee.monthlyRecurringCharge.currency

String

Currency of the monthly recurring charge.

sla.fee.monthlyRecurringCharge.symbol

String

Symbol of the monthly recurring charge currency.

plan

Object

Information of the service plan change.

plan.sourceType

String

The source type of the connection (e.g., NBN).

plan.accessTechnology

String

Access technology type (e.g., FTTP, FTTN).

plan.plan

String

Name of the plan.

plan.term

String

Term of the plan.

plan.speedDown

Object

Download speed details.

plan.speedDown.speed

Number

Download speed value.

plan.speedDown.unit

String

Unit of download speed (e.g., MBit/s).

plan.speedUp

Object

Upload speed details.

plan.speedUp.speed

Number

Upload speed value.

plan.speedUp.unit

String

Unit of upload speed (e.g., MBit/s).

plan.requiresAdditionalNtd

Boolean

Indicates whether an additional NTD is required.

plan.requiresAdditionalNtdReason

String

The reason for requiring an additional NTD, if applicable.

plan.planFee

Object

Applied fee for the service plan change.

plan.planFee.attributes

Object

Attributes of the changed plan. Typically includes a plan and a term

plan.planFee.oneTimeCharge.amount

String

One time charge for the changed plan.

plan.planFee.oneTimeCharge.currency

String

Currency of the one time charge.

plan.planFee.oneTimeCharge.symbol

String

Symbol of the one time charge currency.

plan.planFee.monthlyRecurringCharge.amount

String

Monthly recurring charge of the ordered plan.

plan.planFee.monthlyRecurringCharge.currency

String

Currency of the monthly recurring charge.

plan.planFee.monthlyRecurringCharge.symbol

String

Symbol of the monthly recurring charge currency.

plan.nfasFee

Object

NFAS Commitment fee for the service plan change if applied else null

requestedOn

String

The date/time, including UTC offset, when service plan change requested

contactName

String

Contact name for NTD installation if applicable

contactPhone

String

Contact phone for NTD installation if applicable

contactEmail

String

Contact email for NTD installation if applicable

plan.ntdOptions

Array

List of available NTD (Network Termination Device) options for the plan.

plan.ntdOptions[].option

String

NTD option type (e.g., 4_PORT_RESIDENTIAL).

plan.ntdOptions[].recommended

Boolean

Whether this NTD option is recommended.

plan.ntdOptions[].fee

Object

Fee details for the NTD option.

plan.ntdOptions[].fee.attributes

Object

Attributes related to the NTD installation fee.

plan.ntdOptions[].fee.attributes.ntd_installation_fee

String

The type of NTD installation fee (e.g., 4_PORT_RESIDENTIAL).

plan.ntdOptions[].fee.oneTimeCharge

Object

One-time installation charge for the NTD option.

plan.ntdOptions[].fee.oneTimeCharge.amount

String

Amount of the one-time NTD charge.

plan.ntdOptions[].fee.oneTimeCharge.currency

String

Currency of the one-time charge.

plan.ntdOptions[].fee.oneTimeCharge.symbol

String

Symbol of the currency.

plan.ntdOptions[].fee.monthlyRecurringCharge

Object

Monthly recurring charge for the NTD option.

plan.ntdOptions[].fee.monthlyRecurringCharge.amount

String

Amount of the monthly recurring charge.

plan.ntdOptions[].fee.monthlyRecurringCharge.currency

String

Currency of the monthly recurring charge.

plan.ntdOptions[].fee.monthlyRecurringCharge.symbol

String

Symbol of the currency.

Webhook - ServicePlanChanged

The ServicePlanChanged notification is sent when a service plan change you have requested has been accepted by the nbn, to find more information click here

Currently sent ServiceModified notification for a successful plan change request is deprecated and will be removed shortly. Please move to dedicated ServicePlanChanged webhook event.

Webhook - ServicePlanChangeRejected

The ServicePlanChangeRejected notification is sent when a service plan change you have requested has been rejected by the nbn, to find more information click here

Currently sent ServiceModificationRejected notification for a failed plan change request is deprecated and will be removed shortly. Please move to dedicated ServicePlanChangeRejected webhook event.

Webhook - ServiceRestorationSlaChanged

The ServiceRestorationSlaChanged notification is sent when a service restoration sla change you have requested has been accepted by the nbn, to find more information click here

API Version 8 - Examples

Successful Request

Plan Change only

A service-plan-change-request resource is created by sending a POST request to /api/connect/services/plan-changes/request.

POST Request
POST /api/connect/services/plan-changes/request HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 8
Content-Length: 196
Host: 360-api.superloop.com

{
  "serviceId" : 1600,
  "planName" : "Home Fast 100/40",
  "term" : 1,
  "restorationSla" : null,
  "ntdOption" : null,
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
POST Request for Hyperfast Plans
POST /api/connect/services/plan-changes/request HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 8
Content-Length: 237
Host: 360-api.superloop.com

{
  "serviceId" : 1600,
  "planName" : "Home Hyperfast 2000/200",
  "term" : 1,
  "restorationSla" : null,
  "ntdOption" : "1_PORT",
  "contactName" : "Bruce Wayne",
  "contactPhone" : "0456789456",
  "contactEmail" : "bruce@wayne.com"
}

If all required fields were given, then the response to the request will have:

  1. a http status of 201

  2. a Location header with the URI of the service-plan-change-request resource.

Successful POST Response
HTTP/1.1 201 Created
Location: /api/connect/services/plan-changes/requests/13
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Successful POST Response for Hyperfast Plans
HTTP/1.1 201 Created
Location: /api/connect/services/plan-changes/requests/13
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

Once you have the URI from the Location header, poll that URI every so often by making a GET request. While the plan change is in progress, the GET request’s response will have a http status of 202. Keep polling the URL until it finishes, once the request is completed successfully the GET request’s response will have a http status of 200.

Note
Please keep the polling to a sensible rate.
GET Request
GET /api/connect/services/plan-changes/requests/2 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 8
Host: 360-api.superloop.com
Successful GET Response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 1264

{
  "id" : 2,
  "serviceId" : 1500,
  "plan" : {
    "sourceType" : "NBN",
    "accessTechnology" : "FTTP",
    "plan" : "Home Fast 100/40",
    "term" : "1",
    "speedDown" : {
      "speed" : 100,
      "unit" : "MBit/s"
    },
    "speedUp" : {
      "speed" : 20,
      "unit" : "MBit/s"
    },
    "requiresAdditionalNtd" : null,
    "requiresAdditionalNtdReason" : null,
    "planFee" : {
      "attributes" : {
        "plan" : "Home Fast 100/40",
        "term" : "1"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "73.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    },
    "nfasFee" : null,
    "ntdOptions" : [ ]
  },
  "sla" : {
    "sla" : "Standard",
    "fee" : {
      "attributes" : {
        "sla" : "Standard"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    }
  },
  "requestedOn" : "2020-07-01T04:32:58Z",
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
Successful GET Response for Hyperfast Plans
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 1766

{
  "id" : 12,
  "serviceId" : 1600,
  "plan" : {
    "sourceType" : "NBN",
    "accessTechnology" : "FTTP",
    "plan" : "Home Hyperfast 2000/200",
    "term" : "1",
    "speedDown" : {
      "speed" : 100,
      "unit" : "MBit/s"
    },
    "speedUp" : {
      "speed" : 20,
      "unit" : "MBit/s"
    },
    "requiresAdditionalNtd" : null,
    "requiresAdditionalNtdReason" : null,
    "planFee" : {
      "attributes" : {
        "plan" : "Home Hyperfast 2000/200",
        "term" : "1"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "115.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    },
    "nfasFee" : null,
    "ntdOptions" : [ {
      "option" : "4_PORT_RESIDENTIAL",
      "recommended" : false,
      "fee" : {
        "attributes" : {
          "ntd_installation_fee" : "4_PORT_RESIDENTIAL"
        },
        "oneTimeCharge" : {
          "amount" : "100.00",
          "currency" : "AUD",
          "symbol" : "&#36;"
        },
        "monthlyRecurringCharge" : {
          "amount" : "0.00",
          "currency" : "AUD",
          "symbol" : "&#36;"
        }
      }
    } ]
  },
  "sla" : {
    "sla" : "Standard",
    "fee" : {
      "attributes" : {
        "sla" : "Standard"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    }
  },
  "requestedOn" : "2020-07-01T04:32:58Z",
  "contactName" : "Bruce Wayne",
  "contactPhone" : "0456789456",
  "contactEmail" : "bruce@wayne.com"
}
SLA Change Only
POST Request
POST /api/connect/services/plan-changes/request HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 8
Content-Length: 207
Host: 360-api.superloop.com

{
  "serviceId" : 1600,
  "planName" : "Home Fast 100/20",
  "term" : 1,
  "restorationSla" : "Enhanced - 12",
  "ntdOption" : null,
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
GET Request
GET /api/connect/services/plan-changes/requests/8 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 8
Host: 360-api.superloop.com
Successful GET Response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 1273

{
  "id" : 8,
  "serviceId" : 2300,
  "plan" : {
    "sourceType" : "NBN",
    "accessTechnology" : "FTTP",
    "plan" : "Home Fast 100/20",
    "term" : "1",
    "speedDown" : {
      "speed" : 100,
      "unit" : "MBit/s"
    },
    "speedUp" : {
      "speed" : 20,
      "unit" : "MBit/s"
    },
    "requiresAdditionalNtd" : null,
    "requiresAdditionalNtdReason" : null,
    "planFee" : {
      "attributes" : {
        "plan" : "Home Fast 100/20",
        "term" : "1"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "65.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    },
    "nfasFee" : null,
    "ntdOptions" : [ ]
  },
  "sla" : {
    "sla" : "Enhanced - 8",
    "fee" : {
      "attributes" : {
        "sla" : "Enhanced - 8"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "28.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    }
  },
  "requestedOn" : "2020-07-01T04:32:58Z",
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
Plan Plus SLA Change
POST Request
POST /api/connect/services/plan-changes/request HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 8
Content-Length: 207
Host: 360-api.superloop.com

{
  "serviceId" : 1600,
  "planName" : "Home Fast 100/40",
  "term" : 1,
  "restorationSla" : "Enhanced - 12",
  "ntdOption" : null,
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
GET Request
GET /api/connect/services/plan-changes/requests/9 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 8
Host: 360-api.superloop.com
Successful GET Response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 1273

{
  "id" : 9,
  "serviceId" : 2400,
  "plan" : {
    "sourceType" : "NBN",
    "accessTechnology" : "FTTP",
    "plan" : "Home Fast 100/40",
    "term" : "1",
    "speedDown" : {
      "speed" : 100,
      "unit" : "MBit/s"
    },
    "speedUp" : {
      "speed" : 20,
      "unit" : "MBit/s"
    },
    "requiresAdditionalNtd" : null,
    "requiresAdditionalNtdReason" : null,
    "planFee" : {
      "attributes" : {
        "plan" : "Home Fast 100/40",
        "term" : "1"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "73.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    },
    "nfasFee" : null,
    "ntdOptions" : [ ]
  },
  "sla" : {
    "sla" : "Enhanced - 8",
    "fee" : {
      "attributes" : {
        "sla" : "Enhanced - 8"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "28.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    }
  },
  "requestedOn" : "2020-07-01T04:32:58Z",
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
Plan Change NFAS Commitment Fee Applied
GET Request
GET /api/connect/services/plan-changes/requests/10 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 8
Host: 360-api.superloop.com
Successful GET Response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 1580

{
  "id" : 10,
  "serviceId" : 1200,
  "plan" : {
    "sourceType" : "NBN",
    "accessTechnology" : "FTTP",
    "plan" : "Home Fast 100/40",
    "term" : "1",
    "speedDown" : {
      "speed" : 100,
      "unit" : "MBit/s"
    },
    "speedUp" : {
      "speed" : 20,
      "unit" : "MBit/s"
    },
    "requiresAdditionalNtd" : null,
    "requiresAdditionalNtdReason" : null,
    "planFee" : {
      "attributes" : {
        "plan" : "Home Fast 100/40",
        "term" : "1"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "73.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    },
    "nfasFee" : {
      "attributes" : {
        "nfas_commitment_fee" : true
      },
      "oneTimeCharge" : {
        "amount" : "25.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    },
    "ntdOptions" : [ ]
  },
  "sla" : {
    "sla" : "Standard",
    "fee" : {
      "attributes" : {
        "sla" : "Standard"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    }
  },
  "requestedOn" : "2020-07-01T04:32:58Z",
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}

Invalid Request

If the request is invalid for any reason, a http status of 422 is returned and the body of the response will list the problems with the request.

This example is of submitting a service plan change request with an invalid planName field.

POST Request- Service Plan Change
POST /api/connect/services/plan-changes/request HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 8
Content-Length: 189
Host: 360-api.superloop.com

{
  "serviceId" : 1500,
  "planName" : "Plan-Name",
  "term" : 1,
  "restorationSla" : null,
  "ntdOption" : null,
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
POST Response with request validation errors
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 396

{
  "httpStatusCode" : 422,
  "type" : "client.validation",
  "code" : "validation",
  "message" : "Validation error",
  "apiSubErrors" : [ {
    "code" : "constraints.plan.change.plan.name.invalid",
    "message" : "The Plan is unavailable",
    "object" : "ServicePlanChange",
    "field" : "planName",
    "rejectedValue" : "Plan-Name"
  } ],
  "timestamp" : "2025-10-29T04:13:00.253474289Z"
}
POST Request hyperfast plan - Service Plan Change
POST /api/connect/services/plan-changes/request HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 8
Content-Length: 207
Host: 360-api.superloop.com

{
  "serviceId" : 1500,
  "planName" : "Home Hyperfast 2000/200",
  "term" : 1,
  "restorationSla" : null,
  "ntdOption" : "4_PORT",
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
POST Response with request validation errors
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 961

{
  "httpStatusCode" : 422,
  "type" : "client.validation",
  "code" : "method.argument.not.valid",
  "message" : "Validation error",
  "apiSubErrors" : [ {
    "code" : "constraints.not.blank.if.another.field.not.blank",
    "message" : "must not be blank when ntdOption has a value",
    "object" : "connectRequestServicePlanChangeCommandV8",
    "field" : "contactEmail",
    "rejectedValue" : null
  }, {
    "code" : "constraints.not.blank.if.another.field.not.blank",
    "message" : "must not be blank when ntdOption has a value",
    "object" : "connectRequestServicePlanChangeCommandV8",
    "field" : "contactPhone",
    "rejectedValue" : null
  }, {
    "code" : "constraints.not.blank.if.another.field.not.blank",
    "message" : "must not be blank when ntdOption has a value",
    "object" : "connectRequestServicePlanChangeCommandV8",
    "field" : "contactName",
    "rejectedValue" : null
  } ],
  "timestamp" : "2025-10-29T04:13:02.71645474Z"
}

Resource failed to be created

If the service-plan-change resource failed to be created, a http status of 422 is returned and the body of the response will list the reason why

GET Request
GET /api/connect/services/plan-changes/requests/3 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 8
Host: 360-api.superloop.com
GET Response service-plan-change resource failed to be created
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 403

{
  "httpStatusCode" : 422,
  "type" : "client.validation",
  "code" : "validation",
  "message" : "Validation error",
  "apiSubErrors" : [ {
    "code" : "constraints.service.plan.change.status.in.error",
    "message" : "Plan is no longer available",
    "object" : "ServicePlanChange",
    "field" : "status",
    "rejectedValue" : "IN_ERROR"
  } ],
  "timestamp" : "2025-10-29T04:13:16.332483065Z"
}

API Version 6 and 7 - Examples

Successful Request

Plan Change only

A service-plan-change-request resource is created by sending a POST request to /api/connect/services/plan-changes/request.

POST Request
POST /api/connect/services/plan-changes/request HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 7
Content-Length: 196
Host: 360-api.superloop.com

{
  "serviceId" : 1600,
  "planName" : "Home Fast 100/40",
  "term" : 1,
  "restorationSla" : null,
  "ntdOption" : null,
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
POST Request for Hyperfast Plans
POST /api/connect/services/plan-changes/request HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 7
Content-Length: 207
Host: 360-api.superloop.com

{
  "serviceId" : 1600,
  "planName" : "Home Hyperfast 2000/200",
  "term" : 1,
  "restorationSla" : null,
  "ntdOption" : "1_PORT",
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}

If all required fields were given, then the response to the request will have:

  1. a http status of 201

  2. a Location header with the URI of the service-plan-change-request resource.

Successful POST Response
HTTP/1.1 201 Created
Location: /api/connect/services/plan-changes/requests/13
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Successful POST Response for Hyperfast Plans
HTTP/1.1 201 Created
Location: /api/connect/services/plan-changes/requests/13
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

Once you have the URI from the Location header, poll that URI every so often by making a GET request. While the plan change is in progress, the GET request’s response will have a http status of 202. Keep polling the URL until it finishes, once the request is completed successfully the GET request’s response will have a http status of 200.

Note
Please keep the polling to a sensible rate.
GET Request
GET /api/connect/services/plan-changes/requests/2 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 7
Host: 360-api.superloop.com
Successful GET Response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 1264

{
  "id" : 2,
  "serviceId" : 1500,
  "plan" : {
    "sourceType" : "NBN",
    "accessTechnology" : "FTTP",
    "plan" : "Home Fast 100/40",
    "term" : "1",
    "speedDown" : {
      "speed" : 100,
      "unit" : "MBit/s"
    },
    "speedUp" : {
      "speed" : 20,
      "unit" : "MBit/s"
    },
    "requiresAdditionalNtd" : null,
    "requiresAdditionalNtdReason" : null,
    "planFee" : {
      "attributes" : {
        "plan" : "Home Fast 100/40",
        "term" : "1"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "73.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    },
    "nfasFee" : null,
    "ntdOptions" : [ ]
  },
  "sla" : {
    "sla" : "Standard",
    "fee" : {
      "attributes" : {
        "sla" : "Standard"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    }
  },
  "requestedOn" : "2020-07-01T04:32:58Z",
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
Successful GET Response for Hyperfast Plans
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 1783

{
  "id" : 11,
  "serviceId" : 1600,
  "plan" : {
    "sourceType" : "NBN",
    "accessTechnology" : "FTTP",
    "plan" : "Home Hyperfast 2000/200",
    "term" : "1",
    "speedDown" : {
      "speed" : 100,
      "unit" : "MBit/s"
    },
    "speedUp" : {
      "speed" : 20,
      "unit" : "MBit/s"
    },
    "requiresAdditionalNtd" : null,
    "requiresAdditionalNtdReason" : null,
    "planFee" : {
      "attributes" : {
        "plan" : "Home Hyperfast 2000/200",
        "term" : "1"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "115.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    },
    "nfasFee" : null,
    "ntdOptions" : [ {
      "option" : "4_PORT_RESIDENTIAL",
      "recommended" : false,
      "fee" : {
        "attributes" : {
          "ntd_installation_fee" : "4_PORT_RESIDENTIAL"
        },
        "oneTimeCharge" : {
          "amount" : "100.00",
          "currency" : "AUD",
          "symbol" : "&#36;"
        },
        "monthlyRecurringCharge" : {
          "amount" : "0.00",
          "currency" : "AUD",
          "symbol" : "&#36;"
        }
      }
    } ]
  },
  "sla" : {
    "sla" : "Standard",
    "fee" : {
      "attributes" : {
        "sla" : "Standard"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    }
  },
  "requestedOn" : "2020-07-01T04:32:58Z",
  "contactName" : "Order Contact Name",
  "contactPhone" : "0400000000",
  "contactEmail" : "order@contactemail.com.au"
}
SLA Change Only
POST Request
POST /api/connect/services/plan-changes/request HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 7
Content-Length: 207
Host: 360-api.superloop.com

{
  "serviceId" : 1600,
  "planName" : "Home Fast 100/20",
  "term" : 1,
  "restorationSla" : "Enhanced - 12",
  "ntdOption" : null,
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
GET Request
GET /api/connect/services/plan-changes/requests/8 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 7
Host: 360-api.superloop.com
Successful GET Response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 1273

{
  "id" : 8,
  "serviceId" : 2300,
  "plan" : {
    "sourceType" : "NBN",
    "accessTechnology" : "FTTP",
    "plan" : "Home Fast 100/20",
    "term" : "1",
    "speedDown" : {
      "speed" : 100,
      "unit" : "MBit/s"
    },
    "speedUp" : {
      "speed" : 20,
      "unit" : "MBit/s"
    },
    "requiresAdditionalNtd" : null,
    "requiresAdditionalNtdReason" : null,
    "planFee" : {
      "attributes" : {
        "plan" : "Home Fast 100/20",
        "term" : "1"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "65.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    },
    "nfasFee" : null,
    "ntdOptions" : [ ]
  },
  "sla" : {
    "sla" : "Enhanced - 8",
    "fee" : {
      "attributes" : {
        "sla" : "Enhanced - 8"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "28.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    }
  },
  "requestedOn" : "2020-07-01T04:32:58Z",
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
Plan Plus SLA Change
POST Request
POST /api/connect/services/plan-changes/request HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 7
Content-Length: 207
Host: 360-api.superloop.com

{
  "serviceId" : 1600,
  "planName" : "Home Fast 100/40",
  "term" : 1,
  "restorationSla" : "Enhanced - 12",
  "ntdOption" : null,
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
GET Request
GET /api/connect/services/plan-changes/requests/9 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 7
Host: 360-api.superloop.com
Successful GET Response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 1273

{
  "id" : 9,
  "serviceId" : 2400,
  "plan" : {
    "sourceType" : "NBN",
    "accessTechnology" : "FTTP",
    "plan" : "Home Fast 100/40",
    "term" : "1",
    "speedDown" : {
      "speed" : 100,
      "unit" : "MBit/s"
    },
    "speedUp" : {
      "speed" : 20,
      "unit" : "MBit/s"
    },
    "requiresAdditionalNtd" : null,
    "requiresAdditionalNtdReason" : null,
    "planFee" : {
      "attributes" : {
        "plan" : "Home Fast 100/40",
        "term" : "1"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "73.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    },
    "nfasFee" : null,
    "ntdOptions" : [ ]
  },
  "sla" : {
    "sla" : "Enhanced - 8",
    "fee" : {
      "attributes" : {
        "sla" : "Enhanced - 8"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "28.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    }
  },
  "requestedOn" : "2020-07-01T04:32:58Z",
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
Plan Change NFAS Commitment Fee Applied
GET Request
GET /api/connect/services/plan-changes/requests/10 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 7
Host: 360-api.superloop.com
Successful GET Response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 1580

{
  "id" : 10,
  "serviceId" : 1200,
  "plan" : {
    "sourceType" : "NBN",
    "accessTechnology" : "FTTP",
    "plan" : "Home Fast 100/40",
    "term" : "1",
    "speedDown" : {
      "speed" : 100,
      "unit" : "MBit/s"
    },
    "speedUp" : {
      "speed" : 20,
      "unit" : "MBit/s"
    },
    "requiresAdditionalNtd" : null,
    "requiresAdditionalNtdReason" : null,
    "planFee" : {
      "attributes" : {
        "plan" : "Home Fast 100/40",
        "term" : "1"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "73.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    },
    "nfasFee" : {
      "attributes" : {
        "nfas_commitment_fee" : true
      },
      "oneTimeCharge" : {
        "amount" : "25.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    },
    "ntdOptions" : [ ]
  },
  "sla" : {
    "sla" : "Standard",
    "fee" : {
      "attributes" : {
        "sla" : "Standard"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    }
  },
  "requestedOn" : "2020-07-01T04:32:58Z",
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}

Invalid Request

If the request is invalid for any reason, a http status of 422 is returned and the body of the response will list the problems with the request.

This example is of submitting a service plan change request with an invalid planName field.

POST Request- Service Plan Change
POST /api/connect/services/plan-changes/request HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 7
Content-Length: 189
Host: 360-api.superloop.com

{
  "serviceId" : 1500,
  "planName" : "Plan-Name",
  "term" : 1,
  "restorationSla" : null,
  "ntdOption" : null,
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
POST Response with request validation errors
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 396

{
  "httpStatusCode" : 422,
  "type" : "client.validation",
  "code" : "validation",
  "message" : "Validation error",
  "apiSubErrors" : [ {
    "code" : "constraints.plan.change.plan.name.invalid",
    "message" : "The Plan is unavailable",
    "object" : "ServicePlanChange",
    "field" : "planName",
    "rejectedValue" : "Plan-Name"
  } ],
  "timestamp" : "2025-10-29T04:12:10.252998463Z"
}

Resource failed to be created

If the service-plan-change resource failed to be created, a http status of 422 is returned and the body of the response will list the reason why

GET Request
GET /api/connect/services/plan-changes/requests/3 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 7
Host: 360-api.superloop.com
GET Response service-plan-change resource failed to be created
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 403

{
  "httpStatusCode" : 422,
  "type" : "client.validation",
  "code" : "validation",
  "message" : "Validation error",
  "apiSubErrors" : [ {
    "code" : "constraints.service.plan.change.status.in.error",
    "message" : "Plan is no longer available",
    "object" : "ServicePlanChange",
    "field" : "status",
    "rejectedValue" : "IN_ERROR"
  } ],
  "timestamp" : "2025-10-29T04:12:24.590062775Z"
}

API Version 1, 2, 3, 4 and 5

Request Lifecycle

Changing a service’s plan is a two step process as follows:

  1. Create a service-plan-change-request resource, by sending a POST request to /api/connect/services/plan-changes/request with the body of the request containing the service id, the plan name and term. The response’s http status will be 201 with a blank response body. There will be a Location response header with a URL. This URL is where the request outcome can be obtained.

  2. Make a GET request to the URL returned in 1. to retrieve the outcome of the request. While the request is in progress, the response’s http status will be 202. This means that the request has not finished yet, but will in a moment. If the request was successful a service-plan-change resource will be returned. If the request failed a 422 will be returned with the body containing details on why it failed in the standard error format.

POST Request

Table 12. POST Request

Verb

POST

URI

/api/connect/services/plan-changes/request

Table 13. POST HTTP Request Headers
Name Description

Authorization

The OAuth bearer access token

X-API-VERSION

The version of the endpoint you are accessing

Table 14. POST Request Body Fields
Path Type Description Required

serviceId

Number

The id of the service.

Required

planName

String

The plan name.

Required

term

Number

The plan term.

Required

ntdOption

String

The ntd option.

contactName

String

Contact name for NTD installation if applicable

contactPhone

String

Contact phone for NTD installation if applicable

contactEmail

String

Contact email for NTD installation if applicable

POST Response

Table 15. POST HTTP Status Codes
Status Code Meaning

201

The request was created successfully

401

Bearer token is missing or invalid

404

You do not have permission to perform this task

422

There are validation errors on the request you made. Check the response body to see what fields had issues.

500

There was an unexpected error processing the request

502

There was an unexpected error with one or more of the upstream services

Table 16. POST HTTP Response Headers
Name Description

Location

The URL of the service-plan-change-request resource

GET Request

Note
The URI will be given to you in the Location header of the POST request of the Service Plan Change request.
Table 17. GET Request

Verb

GET

URI

/api/connect/services/plan-changes/requests/{id}

Table 18. GET Request Path Variables

Path Variable

Purpose

id

The id of the service-plan-change-request resource to poll for completion status

Table 19. GET HTTP Request Headers
Name Description

Authorization

The OAuth bearer access token

X-API-VERSION

The version of the endpoint you are accessing

GET Response

Table 20. GET HTTP Status Codes
Status Code Meaning

200

The request is complete. The body contains the service-plan-change resource

202

The request is in progress

401

Bearer token is missing or invalid

404

You are not authorised or The id (of the service-plan-change-request resource) provided does not exist

422

The service-plan-change resource failed to be created. Check the response body to see why

500

There was an unexpected error processing the request

502

There was an unexpected error with one or more of the upstream services

Table 21. GET Response Body Fields
Path Type Description

id

Number

The Connect identifier of the plan change request resource.

serviceId

Number

The Connect identifier of the service resource.

additionalFees

Array

List of additional fees applied for the service plan change.

additionalFees.[].addOnTypeName

String

Name of the addon type.

additionalFees.[].fee

Object

Applied charge for the addon type.

additionalFees.[].fee.attributes

Object

Attributes of the addon type. Varies depending on the addon type. For instance, an SLA addon type would include the sla name

additionalFees.[].fee.oneTimeCharge.amount

String

One time charge of the addon type.

additionalFees.[].fee.oneTimeCharge.currency

String

Currency of the addon type charge.

additionalFees.[].fee.oneTimeCharge.symbol

String

Symbol of the addon type charge currency.

additionalFees.[].fee.monthlyRecurringCharge.amount

String

Monthly recurring charge of the addon type.

additionalFees.[].fee.monthlyRecurringCharge.currency

String

Currency of the monthly recurring charge.

additionalFees.[].fee.monthlyRecurringCharge.symbol

String

Symbol of the monthly recurring charge currency.

fee

Object

Applied fee for the service plan change.

fee.sourceType

String

Source type of the service (e.g., NBN).

fee.accessTechnology

String

Access technology used (e.g., FTTP, FTTN).

fee.requiresAdditionalNtd

Boolean

Indicates whether an additional NTD is required.

fee.requiresAdditionalNtdReason

String

The reason for requiring an additional NTD, if applicable.

fee.attributes

Object

Attributes of the changed plan. Typically includes a plan and a term

fee.oneTimeCharge.amount

String

One time charge for the changed plan.

fee.oneTimeCharge.currency

String

Currency of the one time charge.

fee.oneTimeCharge.symbol

String

Symbol of the one time charge currency.

fee.monthlyRecurringCharge.amount

String

Monthly recurring charge of the ordered plan.

fee.monthlyRecurringCharge.currency

String

Currency of the monthly recurring charge.

fee.monthlyRecurringCharge.symbol

String

Symbol of the monthly recurring charge currency.

requestedOn

String

The date/time, including UTC offset, when service plan change requested

Webhook - ServicePlanChanged

The ServicePlanChanged notification is sent when a service plan change you have requested has been accepted by the nbn, to find more information click here

Currently sent ServiceModified notification for a successful plan change request is deprecated and will be removed shortly. Please move to dedicated ServicePlanChanged webhook event.

Webhook - ServicePlanChangeRejected

The ServicePlanChangeRejected notification is sent when a service plan change you have requested has been rejected by the nbn, to find more information click here

Currently sent ServiceModificationRejected notification for a failed plan change request is deprecated and will be removed shortly. Please move to dedicated ServicePlanChangeRejected webhook event.

API Version 1, 2, 3, 4 and 5 - Examples

Successful Request

Plan Change only

A service-plan-change-request resource is created by sending a POST request to /api/connect/services/plan-changes/request.

POST Request
POST /api/connect/services/plan-changes/request HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 5
Content-Length: 169
Host: 360-api.superloop.com

{
  "serviceId" : 1600,
  "planName" : "Home Fast 100/40",
  "term" : 1,
  "ntdOption" : null,
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
POST Request for Hyperfast Plans
POST /api/connect/services/plan-changes/request HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 5
Content-Length: 210
Host: 360-api.superloop.com

{
  "serviceId" : 1600,
  "planName" : "Home Hyperfast 2000/200",
  "term" : 1,
  "ntdOption" : "1_PORT",
  "contactName" : "Bruce Wayne",
  "contactPhone" : "0456789456",
  "contactEmail" : "bruce@wayne.com"
}

If all required fields were given, then the response to the request will have:

  1. a http status of 201

  2. a Location header with the URI of the service-plan-change-request resource.

Successful POST Response
HTTP/1.1 201 Created
Location: /api/connect/services/plan-changes/requests/13
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Successful POST Response for Hyperfast plans
HTTP/1.1 201 Created
Location: /api/connect/services/plan-changes/requests/13
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

Once you have the URI from the Location header, poll that URI every so often by making a GET request. While the plan change is in progress, the GET request’s response will have a http status of 202. Keep polling the URL until it finishes, once the request is completed successfully the GET request’s response will have a http status of 200.

Note
Please keep the polling to a sensible rate.
GET Request
GET /api/connect/services/plan-changes/requests/2 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 5
Host: 360-api.superloop.com
Successful GET Response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 1017

{
  "id" : 2,
  "serviceId" : 1500,
  "additionalFees" : [ {
    "addOnTypeName" : "SLA",
    "fee" : {
      "attributes" : {
        "sla" : "Standard"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    }
  } ],
  "fee" : {
    "attributes" : {
      "plan" : "Home Fast 100/40",
      "term" : "1"
    },
    "oneTimeCharge" : {
      "amount" : "0.00",
      "currency" : "AUD",
      "symbol" : "&#36;"
    },
    "monthlyRecurringCharge" : {
      "amount" : "73.00",
      "currency" : "AUD",
      "symbol" : "&#36;"
    },
    "sourceType" : "NBN",
    "accessTechnology" : "FTTP",
    "requiresAdditionalNtd" : null,
    "requiresAdditionalNtdReason" : null,
    "ntdOptions" : [ ]
  },
  "requestedOn" : "2020-07-01T04:32:58Z",
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
Successful GET Response for Hyperfast Plans
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 1529

{
  "id" : 11,
  "serviceId" : 1600,
  "additionalFees" : [ {
    "addOnTypeName" : "SLA",
    "fee" : {
      "attributes" : {
        "sla" : "Standard"
      },
      "oneTimeCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      },
      "monthlyRecurringCharge" : {
        "amount" : "0.00",
        "currency" : "AUD",
        "symbol" : "&#36;"
      }
    }
  } ],
  "fee" : {
    "attributes" : {
      "plan" : "Home Hyperfast 2000/200",
      "term" : "1"
    },
    "oneTimeCharge" : {
      "amount" : "0.00",
      "currency" : "AUD",
      "symbol" : "&#36;"
    },
    "monthlyRecurringCharge" : {
      "amount" : "115.00",
      "currency" : "AUD",
      "symbol" : "&#36;"
    },
    "sourceType" : "NBN",
    "accessTechnology" : "FTTP",
    "requiresAdditionalNtd" : null,
    "requiresAdditionalNtdReason" : null,
    "ntdOptions" : [ {
      "option" : "4_PORT_RESIDENTIAL",
      "recommended" : false,
      "fee" : {
        "attributes" : {
          "ntd_installation_fee" : "4_PORT_RESIDENTIAL"
        },
        "oneTimeCharge" : {
          "amount" : "100.00",
          "currency" : "AUD",
          "symbol" : "&#36;"
        },
        "monthlyRecurringCharge" : {
          "amount" : "0.00",
          "currency" : "AUD",
          "symbol" : "&#36;"
        }
      }
    } ]
  },
  "requestedOn" : "2020-07-01T04:32:58Z",
  "contactName" : "Order Contact Name",
  "contactPhone" : "0400000000",
  "contactEmail" : "order@contactemail.com.au"
}

Invalid Request

If the request is invalid for any reason, a http status of 422 is returned and the body of the response will list the problems with the request.

This example is of submitting a service plan change request with an invalid planName field.

POST Request- Service Plan Change
POST /api/connect/services/plan-changes/request HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 5
Content-Length: 162
Host: 360-api.superloop.com

{
  "serviceId" : 1500,
  "planName" : "Plan-Name",
  "term" : 1,
  "ntdOption" : null,
  "contactName" : null,
  "contactPhone" : null,
  "contactEmail" : null
}
POST Response with request validation errors
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 396

{
  "httpStatusCode" : 422,
  "type" : "client.validation",
  "code" : "validation",
  "message" : "Validation error",
  "apiSubErrors" : [ {
    "code" : "constraints.plan.change.plan.name.invalid",
    "message" : "The Plan is unavailable",
    "object" : "ServicePlanChange",
    "field" : "planName",
    "rejectedValue" : "Plan-Name"
  } ],
  "timestamp" : "2025-10-29T04:11:40.242296698Z"
}

Resource failed to be created

If the service-plan-change resource failed to be created, a http status of 422 is returned and the body of the response will list the reason why

GET Request
GET /api/connect/services/plan-changes/requests/3 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 5
Host: 360-api.superloop.com
GET Response service-plan-change resource failed to be created
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 403

{
  "httpStatusCode" : 422,
  "type" : "client.validation",
  "code" : "validation",
  "message" : "Validation error",
  "apiSubErrors" : [ {
    "code" : "constraints.service.plan.change.status.in.error",
    "message" : "Plan is no longer available",
    "object" : "ServicePlanChange",
    "field" : "status",
    "rejectedValue" : "IN_ERROR"
  } ],
  "timestamp" : "2025-10-29T04:11:44.869512546Z"
}