Introduction

Use these endpoints to perform a service aggregation conversion.

Request Lifecycle

Converting the aggregation method of a service can be done, as follows:

  1. Create a service-aggregation-conversion-request resource, by sending a POST request to /api/connect/services/aggregation-conversions/request with the body of the request containing the service id, and the aggregation method we are converting to. 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-aggregation-conversion-request 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.

Please note that the conversion process itself may take a while to complete.

Request Specifications

Table 1. API Versions
Version Header Changes

4

X-API-VERSION=4

Initial Version

5

X-API-VERSION=5

No change

6

X-API-VERSION=6

No Change

7

X-API-VERSION=7

No Change

API Version 4, 5, 6 and 7

POST Request

Table 2. POST Request

Verb

POST

URI

/api/connect/services/aggregation-conversions/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

aggregationMethod

String

The aggregation method being converted to. L2TP or ETHERNET

Required

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

Table 6. POST HTTP Response Headers
Name Description

Location

The URL from where the outcome of the request can be obtained. Poll this URL until the request is complete

GET Request

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

Verb

GET

URI

/api/connect/services/aggregation-conversions/requests/{id}

Table 8. GET Request Path Variables

Path Variable

Purpose

id

The id of the service aggregation conversion request

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-aggregation-conversion-request resource

202

The request is in progress

202

The service-aggregation-conversion-request resource’s status is IN_ERROR. Check the response body to see why. Once the issue is fixed the process will continue

401

You are not authorized to make this request

400

The request was bad. Check the response body to see what the issue(s) are

404

You do not have permission to perform this task

404

The id (of the service-aggregation-conversion-request resource) provided does not exist

422

The service-aggregation-conversion-request resource’s status is FAILED. Check the response body to see why

500

There was an unexpected error processing the request

Table 11. GET Response Body Fields
Path Type Description

id

Number

The Connect identifier of the service-aggregation-conversion-request resource

serviceId

Number

The Connect identifier of the service resource

convertTo

String

L2TP | ETHERNET

status

String

OPEN | IN_PROGRESS | COMPLETED | IN_ERROR | FAILED

requestedOn

String

The date/time, including UTC offset, when the service aggregation conversion request was made

requestedById

Number

The Connect identifier of the user requesting the service aggregation conversion

requestedByName

String

The name of the user requesting the service aggregation conversion

requestedByEmail

String

The email of the user requesting the service aggregation conversion

errorDetail

Varies

Error details. If any

Webhook - ServiceAggregationModified

The ServiceAggregationModified notification is sent after the service has successfully been converted to new aggregation method. To find more information, click here

Webhook - ServiceAggregationModificationFailed

The ServiceAggregationModificationFailed notification is sent when the service could not be converted to new aggregation method. To find more information, click here

API Version 4, 5, 6 and 7 - Examples

Successful Request

A service-aggregation-conversion-request resource is created by sending a POST request to /api/connect/services/aggregation-conversions/request.

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

{
  "serviceId" : 1200,
  "aggregationMethod" : "ETHERNET"
}

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

  1. a http status of 201

Successful POST Response
HTTP/1.1 201 Created
Location: /api/connect/services/aggregation-conversions/requests/1
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 service aggregation conversion 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 and the status will be COMPLETED

Note
Please keep the polling to a sensible rate.
GET Request
GET /api/connect/services/aggregation-conversions/requests/1 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 service aggregations conversion requested
HTTP/1.1 202 Accepted
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: 264

{
  "id" : 1,
  "serviceId" : 1200,
  "convertTo" : "ETHERNET",
  "status" : "OPEN",
  "requestedOn" : "2025-03-11T22:24:15Z",
  "requestedById" : 11001,
  "requestedByName" : "API User",
  "requestedByEmail" : "api@aaa-industries.com.au",
  "errorDetail" : null
}
Successful GET Response service aggregations conversion in progress
HTTP/1.1 202 Accepted
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: 271

{
  "id" : 1,
  "serviceId" : 1200,
  "convertTo" : "ETHERNET",
  "status" : "IN_PROGRESS",
  "requestedOn" : "2025-03-11T22:24:15Z",
  "requestedById" : 11001,
  "requestedByName" : "API User",
  "requestedByEmail" : "api@aaa-industries.com.au",
  "errorDetail" : null
}
Successful GET Response service aggregations conversion completed
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: 269

{
  "id" : 1,
  "serviceId" : 1200,
  "convertTo" : "ETHERNET",
  "status" : "COMPLETED",
  "requestedOn" : "2025-03-11T22:24:15Z",
  "requestedById" : 11001,
  "requestedByName" : "API User",
  "requestedByEmail" : "api@aaa-industries.com.au",
  "errorDetail" : null
}
Successful GET Response service aggregations conversion in error
HTTP/1.1 202 Accepted
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: 315

{
  "id" : 5,
  "serviceId" : 300,
  "convertTo" : "ETHERNET",
  "status" : "IN_ERROR",
  "requestedOn" : "2022-03-15T15:00:00Z",
  "requestedById" : 10,
  "requestedByName" : "Bruce Wayne",
  "requestedByEmail" : "bruce@wayne.com",
  "errorDetail" : "Some error we encountered earlier during Ingest Provisioning"
}
Successful GET Response service aggregations conversion failed
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: 431

{
  "httpStatusCode" : 422,
  "type" : "client.validation",
  "code" : "validation",
  "message" : "Validation error",
  "apiSubErrors" : [ {
    "code" : "constraints.service.aggregation.conversion.request.failed",
    "message" : "An unexpected error occurred.",
    "object" : "ServiceAggregationConversionRequest",
    "field" : "status",
    "rejectedValue" : "FAILED"
  } ],
  "timestamp" : "2025-03-11T22:24:11.438362612Z"
}

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 request when there is already an aggregation conversion in progress for the service.

POST Request - Service Aggregation Conversion Request
POST /api/connect/services/aggregation-conversions/request HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 7
Content-Length: 60
Host: 360-api.superloop.com

{
  "serviceId" : 1200,
  "aggregationMethod" : "ETHERNET"
}
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: 441

{
  "httpStatusCode" : 422,
  "type" : "client.validation",
  "code" : "validation",
  "message" : "Validation error",
  "apiSubErrors" : [ {
    "code" : "constraints.service.not.tc4",
    "message" : "Service with id 1200 is not a nbn TC4 service.",
    "object" : "RequestNbnServiceAggregationConversionCommand.Service",
    "field" : "technologyType",
    "rejectedValue" : false
  } ],
  "timestamp" : "2025-03-11T22:24:14.797323652Z"
}

Bad Request

GET Request bad request
GET /api/connect/services/aggregation-conversions/requests/AAA HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer **token**
X-API-VERSION: 7
Host: 360-api.superloop.com
GET Response bad request
HTTP/1.1 400 Bad Request
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: 363

{
  "httpStatusCode" : 400,
  "type" : "client.validation",
  "code" : "method.argument.type.mismatch",
  "message" : "Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'; nested exception is java.lang.NumberFormatException: For input string: \"AAA\"",
  "apiSubErrors" : [ ],
  "timestamp" : "2025-03-11T22:24:10.270442107Z"
}