Introduction
Use these endpoints to perform a service aggregation conversion.
Request Lifecycle
Converting the aggregation method of a service can be done, as follows:
-
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. -
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’shttp status
will be202
. 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 a422
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
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
Verb |
POST |
URI |
/api/connect/services/aggregation-conversions/request |
Name | Description |
---|---|
|
The OAuth bearer access token |
|
The version of the endpoint you are accessing |
Path | Type | Description | Required |
---|---|---|---|
|
|
The id of the service. |
Required |
|
|
The aggregation method being converted to. |
Required |
POST Response
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 |
Name | Description |
---|---|
|
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. |
Verb |
GET |
URI |
/api/connect/services/aggregation-conversions/requests/{id} |
Path Variable |
Purpose |
|
The id of the service aggregation conversion request |
Name | Description |
---|---|
|
The OAuth bearer access token |
|
The version of the endpoint you are accessing |
GET Response
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 |
Path | Type | Description |
---|---|---|
|
|
The Connect identifier of the service-aggregation-conversion-request resource |
|
|
The Connect identifier of the service resource |
|
|
L2TP | ETHERNET |
|
|
OPEN | IN_PROGRESS | COMPLETED | IN_ERROR | FAILED |
|
|
The date/time, including UTC offset, when the service aggregation conversion request was made |
|
|
The Connect identifier of the user requesting the service aggregation conversion |
|
|
The name of the user requesting the service aggregation conversion |
|
|
The email of the user requesting the service aggregation conversion |
|
|
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 /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:
-
a http status of 201
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 /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
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
}
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
}
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
}
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"
}
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 /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"
}
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 /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
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"
}