Coverage
The Coverage API enables the creation and management of Coverage Access Nodes (CANs). CANs define the area of coverage and clarify to ISPs which criteria for the connection applies when they query coverage endpoints.
Every CAN needs a relation_id, representing the responsible ANO - PIP relation.
Requirement: Relation ID
To create a CAN, you must provide the relation_id.
Steps to create a relation_id:
- Log in to the Infra portal and navigate to "Organisation" > "Relations".
- Hover over the icon to create a relation.
- Enter the relation information in the form and click "Save".
- Once submitted, locate the
relation_idthat is generated for the relation, and use this in the API call.
Create CAN
Customer Access Nodes can be created under the "Create CAN" endpoint.
The following fields are required:
'relation_id': the UUID for the ANO and PIP relation'token': either "planned", "construction", or "operation"'center': the coordinates
Other optional fields listed at the endpoint can be provided to help ISPs understand which products they can offer.
Suppose the 'relation_id' is "db83d865-cb76-4d51-8e9b-097dfcf4e259", 'token' is set to "planned", the 'center' coordinates
are "48.208555, 16.372966", and the 'technology' is "ftth". This request to the API would appear as follows:
$ curl --request POST "https://api.myfiber.at/v2/cov/nodes/" \
$ --header "Authorization: Bearer <access_token>" \
$ --header "Accept: application/json" \
$ --header "Content-Type: application/json" \
$ --data '{"relation_id": "db83d865-cb76-4d51-8e9b-097dfcf4e259",
"token": "planned",
"center": "48.208555, 16.372966",
"technology": "ftth"}'
---> 100%
{
"node_id": "67bbccdd-0011-cc11-ffa0-12937452b877",
"token": "planned",
"center": "48.208555, 16.372966",
...
}
At a minimum, the API returns the fields shown in the example's response. More fields are returned if available.
Note: the API returns a node_id, which uniquely identifies the CAN.
Read Single CAN
A specific CAN can be read at the "Read CAN by ID" endpoint.
To do so, enter the node_id in the path.
$ curl --request GET "https://api.myfiber.at/v2/cov/nodes/67bbccdd-0011-cc11-ffa0-12937452b877/" \
$ --header "Authorization: Bearer <access_token>" \
$ --header "Accept: application/json"
---> 100%
{
"node_id": "67bbccdd-0011-cc11-ffa0-12937452b877",
"token": "planned",
"center": "48.208555, 16.372966",
...
}
Read List of CANs
Particular CANs can be read by specifying any of the query parameters located at the "Read CANs" endpoint.
The list of data is obtained by using No Offset Pagination (or Cursor Pagination) to page through results.
Two query parameters are available to control pagination:
_page_cursor- a unique ID marking the starting point for the next page (defined in the next URL)_page_size- optional, the number of records to receive per page (default: 500, max: 2000)
Here are the steps how to read the list of all nodes with No Offset Pagination.
Steps
-
Request the First Page
In the first page request, simply use the base URL. Optionally, you may set a different
_page_sizequery parameter from the default, if desired.$ curl --request GET "https://api.myfiber.at/v2/cov/nodes" \ $ --header "Authorization: Bearer <access_token>" \ $ --header "Accept: application/json" ---> 100% HTTP/1.1 200 OK date: Thu, 27 Mar 2025 19:25:35 GMT ... x-page-size: 500 x-page-count: 163 link: <https://api.myfiber.at/v2/cov/nodes/>; rel=self, <https://api.myfiber.at/v2/cov/nodes/?_page_cursor=01953216-aaaa-788e-986e-822e157e5114&_page_size=500>; rel=next [ {"tenant": "fiberpark", ... {"tenant": "fiberpark", ... ... ] -
Retrieve the next URL
The next URL for pagination is provided in the API response header in the
linkfield. The method for extracting the next URL varies depending on the programming language used. The Link header is common implementation for pagination.For instance, in the Python script below, we use the
httpxpackage, which parses the links from the response header and stores them in theresponse.linksobject. If another page is available to retrieve, it will include a"next"object with the relevant"url"value for accessing the next page:next_url = response.links.get("next", {}).get("url") -
Request Next Page
Use the
next_urlobtained in Step 2 in your next request:request GET "https://api.myfiber.at/v2/cov/nodes/?_page_cursor=01953216-aaaa-788e-986e-822e157e5114&_page_size=500" -
Repeat Until Completion
Repeat Steps 2 and 3 until no next URL is provided or the last page returns an empty page of data (
[]), indicating all records have been retrieved.
Example Script (Python)
The following script automates pagination to fetch all pages of data. Please replace the <client_id> and <client_secret> placeholders with your credentials. The attributes token_url and scope are provided via API documentation.
# /// Pagination Script
# requires-python = ">=3.11"
# dependencies = [
# "httpx",
# "httpx-auth"
# ]
# ///
import os
import httpx
from httpx_auth import OAuth2ClientCredentials
BASE_URL = "https://api.myfiber.at/v2"
RESOURCE = "/cov/nodes/"
HEADERS = {"Content-Type": "application/json"}
CLIENT_ID = os.environ.get("client_id")
CLIENT_SECRET = os.environ.get("client_secret")
oauth2_cred = OAuth2ClientCredentials(
token_url="<token_url>", # fill in token_url from API documentation
scope="<scopes>", # fill in (list of) scopes from API documentation
client_id=CLIENT_ID,
client_secret=CLIENT_SECRET,
)
results_list = []
next_url = BASE_URL + RESOURCE # mind the slashes "/"
with httpx.Client(headers=HEADERS, auth=oauth2_cred) as client:
while next_url:
response = client.get(url=next_url)
results_list.extend(response.json())
next_url = response.links.get("next", {}).get("url")
print(f"Total records: {len(results_list)}")
You may call this script with the environment variables set as ...
client_id="YOUR_ID" client_secret="YOUR_SECRET" python3 script.py
$env:client_id="YOUR_ID"; $env:client_secret="YOUR_SECRET"; py script.py
set client_id=YOUR_ID&& set client_secret=YOUR_SECRET&& py script.py
Update CAN
Update the CAN by calling this endpoint with the node_id provided as a path parameter. The list of adjustable fields are located in the endpoint's documentation.
In the example below, we update the 'token' value to "operation".
$ curl --request PATCH "https://api.myfiber.at/v2/cov/nodes/67bbccdd-0011-cc11-ffa0-12937452b877/" \
$ --header "Authorization: Bearer <access_token>" \
$ --header "Accept: application/json" \
$ --header "Content-Type: application/json" \
$ --data '{"token": "operation"}'
---> 100%
{
"node_id": "67bbccdd-0011-cc11-ffa0-12937452b877",
"token": "operation",
...
"center": "48.208555, 16.372966",
"status": "48.208555, 16.372966",
"relation_id": "db83d865-cb76-4d51-8e9b-097dfcf4e259",
...
"created_at": "2019-05-29T17:11:14.206+00:00",
"modified_at": "2021-04-12T13:03:07.566+00:00"
}
Delete CAN
The "Delete CAN" endpoint can be used to remove a node_id by putting it in the path.
$ curl --request DELETE "https://api.myfiber.at/v2/cov/nodes/67bbccdd-0011-cc11-ffa0-12937452b877/" \
$ --header "Authorization: Bearer <access_token>" \
$ --header "Accept: application/json"
---> 100%
HTTP/1.1 204 No Content
Content-Type: application/json
Date: Sun, 12 Apr 2021 17:32:16 GMT
<Response body is empty>
Response code: 204 (No Content); Time: 122ms (122 ms); Content length: 0 bytes (0 B)
Search CANs
Search coverage access nodes around a specific coordinate using the GET method "Search CANs". This endpoint returns a list of connections within a given radius (in meters) from the coordinate.
The query parameters for the endpoint are as follows (required are in bold, optional are in italics):
'center': the coordinates'search_radius': distance (in meters) to search from thecentercoordinates (default: 100 meters)'limit': number of results to return (default: 5, max: 10)
$ curl --request GET "https://api.myfiber.at/v2/cov/search/?center=48.3,16.0&search_radius=50" \
$ --header "Authorization: Bearer <access_token>" \
$ --header "Accept: application/json"
---> 100%
[
{"quality": "A", "distance": 0.5, ...
{"quality": "C", "distance": 9.4, ...
...
]
To learn more about the fields that are returned, please refer to descriptions under "Responses" at the endpoint.
[Bulk] Merge CANs
The "[Bulk] Merge CANs" endpoint converts CANs in bulk from pre-production to production status for a particular relation_id entered as a query parameter.
$ curl --request PUT "https://api.myfiber.at/v2/cov/nodes/?relation_id=db83d865-cb76-4d51-8e9b-097dfcf4e259" \
$ --header "Authorization: Bearer <access_token>" \
$ --header "Accept: application/json"
---> 100%
{
"action": [
{"count": 0,
"merge_action": "INSERT"}
]
}
[Bulk] Delete CANs
You may delete multiple CANs at a time for a relation_id via the "[Bulk] Delete CANs" endpoint.
By default, the endpoint removes all CANs in production for the ID. The CAN type can be adjusted to pre-production CANs by including the query parameter target=prenodes.
The query parameters for the endpoint are as follows (required are in bold, optional in italics):
'relation_id': the UUID for the ANO and PIP relation'target': either "nodes" or "prenodes" (default: "nodes")
$ curl --request DELETE "https://api.myfiber.at/v2/cov/nodes/?relation_id=db83d865-cb76-4d51-8e9b-097dfcf4e259" \
$ --header "Authorization: Bearer <access_token>" \
$ --header "Accept: application/json"
---> 100%
HTTP/1.1 204 No Content
Content-Type: application/json
Date: Sun, 12 Apr 2021 17:32:16 GMT
<Response body is empty>
Response code: 204 (No Content); Time: 122ms (122 ms); Content length: 0 bytes (0 B)