F5 Cloud Services - DNS and GSLB API Guidelines

1. Abstract

F5 Cloud Services provides enterprise-grade/business-critical self-service SaaS offerings for application delivery, security and application insights. These multi-cloud services are optimized for cloud-native applications and microservices, have a sleek modern interface including an intuitive UX for low-touch configuration, and are consumed as a utility/pay-as-you-go model.

All F5 Cloud Services can be provisioned and configured in minutes through an intuitive user interface, or fully automated via comprehensive declarative APIs. F5 Cloud Services also deliver the “F5-class” experience customers trust.

This document establishes the usage guidelines for F5 Cloud Service APIs. It details the interfaces required for developing secure applications with authoritative secondary DNS consistently.

2. Get-Started

Some important links to get started with F5 Cloud services:

3. Overview

Developers access multi-cloud platform resources via HTTP interfaces. Although each service across multi-cloud platform typically provides language-specific frameworks to wrap their APIs, all of their operations eventually boil down to HTTP requests.

F5 cloud services must support a wide range of clients and services and cannot rely on rich frameworks being available for every development environment. Thus, a goal of these guidelines is to ensure F5 cloud services APIs can be easily and consistently consumed by any client with basic HTTP support.

To provide the smoothest possible experience for developers, it’s important that we create APIs with guidelines that follow a consistent design pattern, thus making them easy and intuitive.

This document establishes the guidelines on usage of F5 Cloud services DNS APIs which will help developers with integrating their apps easily and enable rapid development.

3.1. API-First Approach

API-first development is a strategy in which the API is developed first, prioritizing target developers interests, and then the API is used to build the product (be it a website, mobile application, or a SaaS software). By building on top of developer-centric APIs, you and your developers are saving a lot of work while laying down the foundations for others to build on.

Integration failures are fairly common. The API-first approach helps reduce these failures, as well as helps formally recognize your API as a first-class citizen of the development process. This gives your teams the ability to work with each other without interfering with internal development processes.

3.2. Why API-First Development?

A development process is currently not parallel, but synchronous.

When a new service or a new feature is required, the R&D teams start working on additions or changes to the API. After the API has been updated, the backend team starts to write a prototype (other teams like the frontend and Q&A teams meanwhile are waiting). Once the prototype is done, an API document can be prepared and shared with the different teams (Q&A, frontend).

API-first development will allow parallel development by all teams without the need for changes to be released by one or another team.

_images/api-first-approach.jpg

In the picture above, we can see the first set of APIs that are created are mockups. Second, both back-end, front-end, and test teams are starting to work with the mocked-up APIs. Once the API is ready, all teams can switch to the production or staging APIs. This saves a lot of development time, enables collaboration, and parallel development.

3.3. Why REST API?

REST API is an integral part of how developers interface with APIs, and any cloud-born application connecting to multiple systems and services would benefit from REST.

Understanding the philosophy behind the REST Architectural Style is recommended for developing good HTTP-based services. If you are new to RESTful design, here are some good resources:

REST on Wikipedia – Overview of common definitions and core ideas behind REST.

REST Dissertation – The chapter on REST in Roy Fielding’s dissertation on Network Architecture, “Architectural Styles and the Design of Network-based Software Architectures”

REST in Practice – Book on the fundamentals of REST.

3.4. Why Declarative API?

There are two models to build API’s-

  • The first is imperative, in which we tell the target system exactly how to do what we want to do. If you have ever opened up an SSH tunnel to a system and typed in a specific set of commands on the CLI, you have engaged in the imperative model of configuration.
  • The second (and preferred) is declarative, in which we tell the target system what to do, but not how. This is the model embraced by most network automation solutions for a number of reasons, the most prominent being the overwhelming cost and time required to learn and integrate the hundreds of possible devices and systems that might be in a given environment.
_images/why_declarative.jpg
  • Let’s look at an example. If you are planning to use an API for a network or application service, you have to understand the system. If you don’t know the difference between a virtual IP and a virtual server, that would be an issue. Imperative API-based methods require that you understand the target system well-enough to navigate its configuration.
  • Using a declarative model, you need less expertise in the target system, which means developers and DevOps alike are more likely to be self-sufficient when working with applications using the method. You would still need experts, of course, but the demands on consumers of the services is reduced and spreads out the burden of provisioning and deployment across a broader set of constituents.

Let’s see this example for a declarative API (using F5 Cloud DNS Services API). The method creates a DNS service here-

POST http://mydomain.com/v1/svc-subscription/subscriptions

The response would be something like:

{
    "subscription_id": "s-aammshxtff",
    "account_id": "a-aamnKjo-72",
    "user_id": "u-aa95SoHISx",
    "catalog_id": "c-aaxBJkfg8u",
    "service_instance_id": "adns-aajaS5C4Mp",
    "status": "DISABLED",
    "service_instance_name": "webers_Service",
    "deleted": false,
    "service_type": "adns",
    "configuration": {
        "adns_service": {
            "master_servers": [
                "104.XX.XX.XX"
            ],
            "zone": "mydomain.com"
        },
        .....
           .....
    }
}

3.6. API for Geo-location Codes Mapping

The API will help with finding geo-locations and their respective codes. If you have access, you can see the entire details in The F5 Wiki.

3.6.1. GET v1/svc-geo/continents

Description API to get all continents and their codes
Method GET
Response code
200 OK
401 Unauthorized
403 Forbidden
404 Not Found
Response
(Array of continents
and codes, Can be
modelled as a map)
{
  "codes": [{
     "name": "Asia",
     "code": "AS"
     }, {
     "name": "Australia",
     "code": "OC"
     }]
}

3.6.2. GET v1/svc-geo/countries

Description API to get all countries and their codes
Method GET
Response code
200 OK
401 Unauthorized
403 Forbidden
404 Not Found
Response
{
  "codes": [{
     "name": "Afghanistan",
     "code": 786
     }, {
     "name": "Albania",
     "code": 378
     }]
}

3.6.3. GET v1/svc-geo/regions

Description API to get all regions and their codes
Method GET
Response code
200 OK
401 Unauthorized
403 Forbidden
404 Not Found
Response
{
  "codes": [{
     "name": "California",
     "code": 5,
     "countryCode": ""
     }, {
     "name": "Nagasaki",
     "code": 9641,
     "countryCode": ""
     }]
}

3.6.4. GET v1/svc-geo/

Description API to get all continents and their codes
Method GET
Response code
200 OK
401 Unauthorized
403 Forbidden
404 Not Found
Response
{
   "Continents": {
      "codes": [{
         "name": "Asia",
         "code": "AS"
         }, {
         "name": "Australia",
         "code": "OC"
         }]
      },
   "Countries": {
      "codes": [{
         "name": "Afghanistan",
         "code": 786,
         "contenentCode": "AS"
         }, {
         "name": "Albania",
         "code": 378,
         "contenentCode": "AS"
         }],
      },
   "regions" {
      "codes": [{
         "name": "California",
         "code": 5,
         "countryCode": ""
         }, {
         "name": "Nagasaki",
         "code": 9641,
         "countryCode": ""
         }]
      }
}

API Service Design

The GeoIPAPI microservice will provide the above api’s. For each request, it will use Authz or other AccessControl Rules to validate that the user has access to GeoIP related services like GSLB/WAF, etc. Right now, user has access to all services. It will rely on API Gateway for authentication.

The GeoIPAPI service itself will use the geoip-go library and the downloaded DE files to load and parse the necessary continent/country/region information.

4. F5 Cloud Services DNS API Overviews and Example

F5 DNS Cloud Service is a secondary authoritative DNS service, which is generally available on AWS marketplace and F5 cloud services, as of 27th of March 2019. With global distribution, built-in DDoS Protection, and automatic scaling, the DNS Cloud Service can serve as a backup to your primary DNS services.

In this section we will deploy an authoritative secondary DNS using the API reference using POSTMAN. You can find the POSTMAN collection here for DNS service API- DNS Collection

4.1. Validate Variables in POSTMAN

Before executing the following commands, ensure that your variables are correctly set on POSTMAN

_images/F5-DNS-Variables.png

4.2. Login and get the access token for the DNS service creation

First and foremost, you must login to the F5 cloud services, and save the auth key for use with future API calls.

– Login validation

POST https://{{HOSTNAME}}/{{API_VERSION}}/svc-auth/login

– RESULT:

{
    "access_token": "eyJraWQiOiI3SGZMS1d6NG11eWNXTWdweTlzZzJcLzNjUXVkZk13aHRqamZrVmo2OU8ydz0iLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiI3OWI0OTU0YS1mYzFlLTQ5YjctODhjYi0zNGQzMTNiZTI4ZjIiLCJldmVudF9pZCI............",
    "refresh_token": "eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAifQ.ZX1pOv80erBbvUjylIf4eHCBMywVp2rIpfiudLnRJU_5B57uQcUdEB8McUTAMofVnWwJ0my086jW2LE-tm_ipQOnVM5WLb-MIR4sOQ5w_............",
    "expires_at": "3600"
}

4.3. Get account details and validate the variables

Once you have the auth key, you will need the account ID for creating new service instances. The following API call wlil help with getting this information.

– GET svc-account/user information

GET https://{{HOSTNAME}}/{{API_VERSION}}/svc-account/user

– RESULT

{
    "id": "u-aa95RoSISx",
    "email": "login@domain.com",
    "first_name": "John",
    "last_name": "Doe",
    "phone": "",
    "primary_account_id": "a-zaasKjo-71",
    "status": "active",
    "email_confirmed": true,
    "phone_confirmed": false,
    "unconfirmed_email": "",
    "time_zone": "",
    "preferred_language": "",
    "user_email_history": [],
    "current_password": "",
    "create_time": "2019-03-28T17:59:00.473840Z",
    "update_time": "2019-03-28T17:59:00.473840Z",
    "activate_time": null,
    "delete_time": null,
    "reset_password_sent_time": null,
    "reset_password_time": null,
    "email_confirmation_sent_time": "2019-03-28T17:59:32.122791Z",
    "email_confirmation_time": "2019-03-28T17:59:32.122791Z",
    "phone_confirmation_sent_time": null,
    "phone_confirmation_time": null
}

4.4. Creation of DNS Service zones as secondary to primary DNS host

Once you have access to the auth key, and you have your account ID, you are all set to create a new service instance of authoritative DNS using the information gathered. The following API Call will provide all the details needed to activate the service.

– DNS Service deployment on F5 Cloud Services

POST https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions

RESULT

{
    "subscription_id": "s-aavyhRKu1T",
    "account_id": "a-zaasKjo-71",
    "user_id": "u-aa95RoSISx",
    "catalog_id": "c-aaxBJkfg8u",
    "service_instance_id": "adns-aa4HEJxewF",
    "status": "DISABLED",
    "service_instance_name": "Domain_Service",
    "deleted": false,
    "service_type": "adns",
    "configuration": {
        "adns_service": {
            "master_servers": [
                "104.XX.XX.XX"
            ],
            "zone": "mydomain.com"
        },
        "nameservers": [
            {
                "ipv4": "107.162.158.150",
                "ipv6": "2604:e180:1021::ffff:6ba2:9e96",
                "name": "ns1.f5cloudservices.com"
            },
            {
                "ipv4": "107.162.158.151",
                "ipv6": "2604:e180:1021::ffff:6ba2:9e97",
                "name": "ns2.f5cloudservices.com"
            }
        ]
    },
    "create_time": "2019-06-13T22:32:50.168128Z",
    "update_time": "2019-06-13T22:32:50.168128Z",
    "cancel_time": null,
    "end_time": null
}

Note

Download the DNS nameservers list in csv format: Nameservers

4.5. Activate new DNS subscription and deploy them to available zones.

Let’s go ahead and activate the service using the following API call, this will deploy the secondary authoritative DNS on F5 cloud services.

POST https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{SUBSCRIPTION_ID}}/activate

– RESULT

{
    "status": "ACTIVE",
    "service_state": "DEPLOYING",
    "subscription_id": "s-aavyhRKu1T"
}

4.6. Validate the DNS service subscription status

Once the authoritative DNS is provisioned, it’s critical to check the subscription status to ensure the configuration was fully deployed to all regions correctly. Once the services have been deployed, they are ready to be used, and you now have highly available, resilient secondary authoritative DNS.

GET https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{SUBSCRIPTION_ID}}/status

– RESULT

{
    "status": "ACTIVE",
    "service_state": "DEPLOYED",
    "subscription_id": "s-aavyhRKu1T"
}
  • Here’s a view of the portal post deployment of the secondary authorative DNS, showing both the deployed secondary, and the zones information
_images/F5-cloud-services-portal-deployed.png

_images/dns-service-zone-properties.png

4.7. Delete the DNS service by calling the API

Once you decide to delete the secondary authoritative DNS. You can use the following API call to delete the previously collected information.

POST https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{SUBSCRIPTION_ID}}/retire

– RESULT

{
    "status": "RETIRED",
    "service_state": "UNDEPLOYED",
    "subscription_id": "s-aavyhRKu1T"
}

4.8. Logout from the session

– Logout

POST https://{{HOSTNAME}}/{{API_VERSION}}/svc-auth/logout

5. F5 Cloud Services DNS Load Balancer (GSLB (preview)) API Overview and Example

F5 DNS Load Balancer Cloud Service is a global server load balancing (GSLB) solution offered in the cloud as a service. In other words, it is a SaaS solution for GSLB. It can provide load sharing across multiple locations, increased reliability by avoiding a single point of failure, and increased performance by directing traffic to the optimal site. It does this by dynamically responding to client DNS queries in order to direct traffic based on rules that you define.

In this section we will deploy DNS load balancer using the API reference of POSTMAN. You can find the POSTMAN collection here for DNS Load Balancer service API- GSLB Collection

5.1 Validate Variables in POSTMAN

Before executing the following commands, ensure that your variables are correctly set on POSTMAN. If you are using other tool, please set the variables accordingly. This screenshot should help.

_images/Set_Variables_GSLB.gif

5.2. Login and get the access token for GSLB service creation

First and foremost, you must login to the F5 cloud services and save the auth key for use with future API calls.

POST https://{{HOSTNAME}}/{{API_VERSION}}/svc-auth/login

– RESULT:

{
    "access_token": "eyJraWQiOiI3SGZMS1d6NG11eWNXTWdweTlzZzJcLzNjUXVkZk13aHRqamZrVmo2OU8ydz0iLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiI3OWI0OTU0YS1mYzFlLTQ5YjctODhjYi0zNGQzMTNiZTI4ZjIiLCJldmVudF9pZCI............",
    "refresh_token": "eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAifQ.ZX1pOv80erBbvUjylIf4eHCBMywVp2rIpfiudLnRJU_5B57uQcUdEB8McUTAMofVnWwJ0my086jW2LE-tm_ipQOnVM5WLb-MIR4sOQ5w_............",
    "expires_at": "3600"
}

5.3. Get account details and validate the variables

Once you have the auth key, you will need the account ID for creating new service instances. The following API call will help with getting this information.

GET https://{{HOSTNAME}}/{{API_VERSION}}/svc-account/user

– RESULT

{
    "id": "u-aa95RoSISx",
    "email": "login@domain.com",
    "first_name": "John",
    "last_name": "Doe",
    "phone": "",
    "primary_account_id": "a-zaasKjo-71",
    "status": "active",
    "email_confirmed": true,
    "phone_confirmed": false,
    "unconfirmed_email": "",
    "time_zone": "",
    "preferred_language": "",
    "user_email_history": [],
    "current_password": "",
    "create_time": "2019-03-28T17:59:00.473840Z",
    "update_time": "2019-03-28T17:59:00.473840Z",
    "activate_time": null,
    "delete_time": null,
    "reset_password_sent_time": null,
    "reset_password_time": null,
    "email_confirmation_sent_time": "2019-03-28T17:59:32.122791Z",
    "email_confirmation_time": "2019-03-28T17:59:32.122791Z",
    "phone_confirmation_sent_time": null,
    "phone_confirmation_time": null
}

5.4. Creation of Multi-PX GSLB Service

Once you have access to the auth key, and have your account ID, you are all set to create a new service instance of DNS load balancer (GSLB(Preview)) using the information gathered. The following API Call will provide all the details needed to activate the service.

POST https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions

– RESULT

{
    "subscription_id": "s-aa0-WymayB",
    "account_id": "a-aazsKjo-71",
    "user_id": "u-aa95SoRISx",
    "catalog_id": "c-aaQnOrPjGu",
    "service_instance_id": "gslb-aaMkjP8WPm",
    "status": "DISABLED",
    "service_instance_name": "My_GSLB_Service",
    "deleted": false,
    "service_type": "gslb",
    "configuration": {
        "gslb_service": {
            "load_balanced_records": {
                "lbr1": {
                    "aliases": [
                        "www",
                        "www2"
                    ],
                    "display_name": "Web Sites",
                    "enable": true,
                    "persist_cidr_ipv4": 24,
                    "persist_cidr_ipv6": 56,
                    "persistence": true,
                    "persistence_ttl": 3600,
                    "proximity_rules": [
                        {
                            "pool": "pools_Global_Pool",
                            "region": "regions_Everywhere",
                            "score": 50
                        },
                        {
                            "pool": "pools_EU_Pool",
                            "region": "regions_EU",
                            "score": 80
                        }
                    ],
                    "rr_type": "A"
                }
            },
            "monitors": {
                "monitors_Web_Site_Monitor": {
                    "display_name": "Web Site Monitor",
                    "monitor_type": "http",
                    "receive": "HTTP/1.",
                    "send": "HEAD / HTTP/1.0\\r\\n\\r\\n",
                    "target_port": 80
                }
            },
            "pools": {
                "pools_EU_Pool": {
                    "display_name": "EU Pool",
                    "enable": true,
                    "load_balancing_mode": "round-robin",
                    "max_answers": 1,
                    "members": [
                        {
                            "monitor": "monitors_Web_Site_Monitor",
                            "virtual_server": "ipEndpoints_EU_app_instance_1"
                        },
                        {
                            "monitor": "monitors_Web_Site_Monitor",
                            "virtual_server": "ipEndpoints_EU_app_instance_2"
                        }
                    ],
                    "rr_type": "A",
                    "ttl": 30
                },
                "pools_Global_Pool": {
                    "display_name": "Global Pool",
                    "enable": true,
                    "load_balancing_mode": "round-robin",
                    "max_answers": 1,
                    "members": [
                        {
                            "monitor": "monitors_Web_Site_Monitor",
                            "virtual_server": "ipEndpoints_Global_app_instance_1"
                        },
                        {
                            "monitor": "monitors_Web_Site_Monitor",
                            "virtual_server": "ipEndpoints_Global_app_instance_2"
                        }
                    ],
                    "rr_type": "A",
                    "ttl": 30
                }
            },
            "regions": {
                "regions_EU": {
                    "display_name": "Europe",
                    "sectors": [
                        {
                            "code": "EU",
                            "scale": "continent"
                        }
                    ]
                },
                "regions_Everywhere": {
                    "display_name": "Everywhere",
                    "sectors": [
                        {
                            "code": "NA",
                            "scale": "continent"
                        },
                        {
                            "code": "AN",
                            "scale": "continent"
                        },
                        {
                            "code": "AS",
                            "scale": "continent"
                        },
                        {
                            "code": "OC",
                            "scale": "continent"
                        },
                        {
                            "code": "EU",
                            "scale": "continent"
                        },
                        {
                            "code": "SA",
                            "scale": "continent"
                        },
                        {
                            "code": "AF",
                            "scale": "continent"
                        }
                    ]
                }
            },
            "virtual_servers": {
                "ipEndpoints_EU_app_instance_1": {
                    "address": "13.35.125.10",
                    "display_name": "EU app instance 1",
                    "monitor": "monitors_Web_Site_Monitor",
                    "port": 80
                },
                "ipEndpoints_EU_app_instance_2": {
                    "address": "13.35.125.74",
                    "display_name": "EU app instance 2",
                    "monitor": "monitors_Web_Site_Monitor",
                    "port": 80
                },
                "ipEndpoints_Global_app_instance_1": {
                    "address": "95.211.80.227",
                    "display_name": "Global app instance 1",
                    "monitor": "monitors_Web_Site_Monitor",
                    "port": 80
                },
                "ipEndpoints_Global_app_instance_2": {
                    "address": "206.251.255.62",
                    "display_name": "Global app instance 2",
                    "monitor": "monitors_Web_Site_Monitor",
                    "port": 80
                }
            },
            "zone": "example.com"
        },
        "nameservers": [
            {
                "ipv4": "107.162.150.192",
                "ipv6": "2604:e180:1021::ffff:6ba2:96c0/128",
                "name": "ns91.dns.cloudservices.f5.com"
            }
        ]
    },
    "create_time": "2019-06-24T21:54:09.078481Z",
    "update_time": "2019-06-24T21:54:09.078481Z",
    "cancel_time": null,
    "end_time": null
}

Note

The JSON shown above includes several name/value pairs where the name is display_name. When the DNS Load balancer was in an early preview state, the display_name entries were optional. This is no longer the case, and all display_name pairs must be included with a value.

5.5. Activate new GSLB subscription and deploy them to available zones

Let’s go ahead and activate the service using the following API call. This will deploy the DNS load balancer on F5 cloud services.

POST https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{SUBSCRIPTION_ID}}/activate

– RESULT

{
    "status": "ACTIVE",
    "service_state": "DEPLOYING",
    "subscription_id": "s-aaXk59cJMW"
}

5.6. Validate the GSLB service subscription status

Once the DNS load balancer (GSLB(Preview)) is provisioned, it’s critical to check the subscription status to ensure the configuration was fully deployed correctly by examining the service_status in the return. Once the services have been deployed, they are ready to be used, and you now have a global DNS load balancer.

The following API call would provide with the details required

GET https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{SUBSCRIPTION_ID}}/status

– RESULT

{
    "status": "ACTIVE",
    "service_state": "DEPLOYED",
    "subscription_id": "s-aaXk59cJMW"
}
  • Here’s a view of the portal post deployment of the DNS Load balancer (GSLB), showing the domains, records and zones information.
_images/gslb-portal-deployment-view.png

_images/details-page-gslb.png

_images/load-balancer-record-properties.png

5.7. List the subscription details before deletion.

Given GSLB(preview) currently supports command based deployment, before deletion of the services you may want to list the subscription details, or you may have to redo the deployment again from scratch. Followed by, listing the subscription and creating the GSLB(preview) service.

– List subscription details before deletion

GET https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{SUBSCRIPTION_ID}}

– RESULT

{
    "subscription_id": "s-aab8Nl45aI",
    "account_id": "a-aazsKjo-71",
    "user_id": "u-aa95SoRISx",
    "catalog_id": "c-aaQnOrPjGu",
    "service_instance_id": "gslb-aaGVAgUgpd",
    "status": "ACTIVE",
    "service_instance_name": "My_GSLB_Service",
    "deleted": false,
    "service_type": "gslb",
    "configuration": {
        "gslb_service": {
             "load_balanced_records": {
                 "lbr1": {
                     "aliases": [
                         "www",
                         "www2"
                     ],
                     "display_name": "Web Sites",
                     "enable": true,
                     "persist_cidr_ipv4": 24,
                     "persist_cidr_ipv6": 56,
                     "persistence": true,
                     "persistence_ttl": 3600,
                     "proximity_rules": [
                         {
                             "pool": "pools_Global_Pool",
                             "region": "regions_Everywhere",
                             "score": 50
                         },
                         {
                             "pool": "pools_EU_Pool",
                             "region": "regions_EU",
                             "score": 80
                         }
                     ],
                     "rr_type": "A"
                 }
             },
        ...........

5.8. Delete the GSLB deployed service

If you wish to delete the deployed service, please use the followig API call for deletion.

POST https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{SUBSCRIPTION_ID}}/retire

– RESULT

{
    "status": "RETIRED",
    "service_state": "UNDEPLOYED",
    "subscription_id": "s-aaXk59cJMW"
}

5.9. Logout from the session

– Logout

POST https://{{HOSTNAME}}/{{API_VERSION}}/svc-auth/logout

6. Versioning

7. Unsupported requests

8. Naming guidelines

9. Appendix