Overview

The Discovery Service provides an application with details of the the end-users operator. Once these details have been obtained then the application will be able to make Mobile Connect calls to the operators endpoints.

The Service has various methods of identifying the operator. Where possible, this is done in the background (without user interaction), but in some situations it is necessary to ask an end-user to provide additional details. In this case the Discovery Service will present an "Operator Selection User Interface" which prompts the end user to enter their MSISDN or select their operator.

This document explains the different requests that are available to applications as well as specifying the details of the API.

API Reference

Request

GET {Provider}/v2/discovery/?query_parameters

POST {Provider}/v2/discovery/

 

Header parameters

Parameter name Value Description
Mandatory parameters
Authorization string HTTP Basic authorization to access the API. Base64 encoded string of your <client_id>:<client_secret>

Optional parameters
Accept string Indicates the content type required for the response. text/html can be used on the request with OperatorSelection request to get an html Response. For all other requests, always default to application/json

Accepted Values:

  • application/json
  • text/html

 

Query parameters

Parameter name Value Method Description
Mandatory parameters
Redirect_URL string POST
GET
The Redirect URL that you set when you create your application. Determines where Discovery Service sends responses to your OperatorSelection request.
Optional parameters
Identified-MCC string POST
GET
The 3 Digit Numeric Mobile Country Code of the device SIM Card - normally obtained via a native os application.
Identified-MNC string POST
GET
The 2 or 3 Digit Numeric Mobile Network Code of the device SIM Card - normally obtained via a native os application.
Selected-MCC string POST
GET
The 3 Digit Numeric Mobile Country Code of the response from the Operator Selection WebApp.
Selected-MNC string POST
GET
The 2 or 3 Digit Numeric Mobile Network Code of the response from the Operator Selection WebApp.
Using-Mobile-Data boolean POST
GET
Set to true if your application is able to determine that the user is accessing the service via mobile data. This tells Discovery Service to attempt to discover using information provided by the mobile network.

Default: true

MSISDN string POST The mobile number, in E.164 number format, of your user.
X-Source-IP IP address POST
GET
The IP address of the users device. If the device is making a Discovery request directly then this is not needed as it is picked up automatically. If the application is client/server based then the server can use the this to pass in the IP address of the client and to tell Discovery to ignore the request IP address. The IP address is used by Discovery to try and detect the users operator.
MSISDN string POST The mobile number, in E.164 number format, of your user.

 

Discovery Requests

The following is a list of the possible Discovery requests

 

User selected MCC/MNC with GET

GET /v2/discovery{?Selected-MCC,Selected-MNC}

When the country and operator have been selected by the user via the Discovery UI, this is passed to the API Exchange via the Discovery API and the MNOs endpoints are returned.

URI Parameters

Parameter Type Required Example
Selected-MCC string Yes 902
Selected-MNC string Yes 02
Redirect_URL string Yes https://localhost/

 

Request

The following example use the Sandbox

GET https://discovery.sandbox.mobileconnect.io/v2/discovery?Selected-MCC=902&Selected-MNC=02&Redirect_URL=https://localhost/

 

Headers

Content-Type: application/json
Authorization: Basic MDQ4MTZmMWYtOTAwMi00YjczLTkyNDAtZWQ2YjZhNWZhYjZmOmFiMjZkMmJkLTAzMTItNDE4OC1iYzA4LWE1MjdmYTFjMGQyMg==

 

Response 200 OK

  • Two cookies are set (this is default for the discovery response, unless Set-Cookies parameter is set to false in the request)
  • Enum-Nonce cookie is reset, as this is not a MSISDN based discovery.

Headers

Content-Type: application/json

Cookies

Name Value Domain Path Expires HTTP Secure
Most-Recent-Selected-Operator 5885cafbbba12f25546a9cdf discovery.sandbox.mobileconnect.io /v2 Never true false
Most-Recent-Selected-Operator-Expiry 2017-03-08T11:24:33.921586 discovery.sandbox.mobileconnect.io /v2 Never true false

Body

{
  "subscriber_id": null,
  "ttl": 1488452073,
  "response": {
    "serving_operator": "Example Operator B",
    "client_secret": "YWIyNmQyYmQtMDMxMi00MTg4LWJjMDgtYTUyN2ZhMWMwZDIyOm9wZXJhdG9yLWI=",
    "country": "US",
    "apis": {
      "operatorid": {
        "link": [
          {
            "rel": "authorization",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/authorize"
          },
          {
            "rel": "token",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/accesstoken"
          },
          {
            "rel": "userinfo",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/userinfo"
          },
          {
            "rel": "tokenrevoke",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/revoke"
          },
          {
            "rel": "premiuminfo",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/premiuminfo"
          },
          {
            "rel": "scope",
            "href": "openid profile email"
          },
          {
            "rel": "openid-configuration",
            "href": "https://operator-b.sandbox.mobileconnect.io/.well-known/openid-configuration"
          },
          {
            "rel": "jwks",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/operator-b/jwks.json"
          }
        ]
      }
    },
    "currency": "USD",
    "client_name": "TestApp",
    "client_id": "MDQ4MTZmMWYtOTAwMi00YjczLTkyNDAtZWQ2YjZhNWZhYjZmOm9wZXJhdG9yLWI="
  }
}

Schema

{
  "": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "ttl": {
      "type": "string",
      "description": "A unix timestamp indicating the "time to live" of the response object. A timestamp in the future indicates that this response may be cached to improve performance. The `ttl` value does not have to be in the future and if it's not, the response object should not be cached.\n"
    },
    "subscriber_id": {
      "type": "string",
      "description": "    MSISDN value encoded with operator RSA certificate that can be passed along as "login_hint" parameter of the Mobile Connect API. This response value is only available when the request contains an MSISDN on the `MSISDN` parameter. The `subscriber_id` is opaque to the service provider's application in that it cannot be decypted by the application - it can only be used to pass to the mobile connect API in order to streamline the users login (potentially saving them entering an MSISDN for a second time).\n"
    },
    "response": {
      "type": "object",
      "properties": {
        "client_id": {
          "type": "string",
          "description": "00a9-4421-90d0-82cf76eba7e0 (string, required)\n\nclient_id part of your credential to be used by OIDC requests. It's important to note that this will likely not be the same as the client_id used for the discovery request and it's not safe to assume the client_id will be the same (or a variation of) the discovery request key.\n"
        },
        "client_secret": {
          "type": "string",
          "description": "4e73-4bc0-91e7-16b40cf75c67 (string, required)\n\nclient_secret part of your credential to be used by OIDC requests. Much like the `client_id`, this may be different to the discovery request credential.\n"
        },
        "serving_operator": {
          "type": "string",
          "description": "The name of the users mobile network operator (MNO)."
        },
        "country": {
          "type": "string",
          "description": "The country name in which this network operates."
        },
        "currency": {
          "type": "string",
          "description": "The currency of the serving operator."
        },
        "client_name": {
          "type": "string",
          "description": "A short app name which can be used for the `client_name` parameter on mobile connect auth requests."
        },
        "apis": {
          "type": "object",
          "properties": {
            "operatorid": {
              "type": "object",
              "properties": {
                "link": {
                  "type": "array",
                  "description": "The links describe the available endpoints for the operator. These endpoints can be used to perform mobile connect operations for the discovered MSISDN or MNC/MCC pair.\n"
                }
              },
              "required": [
                "link"
              ]
            }
          },
          "required": [
            "operatorid"
          ],
          "description": "An object describing the available interfaces for this operator which currently includes mobile connect auth related endpoints, as well as premiuminfo endpoints."
        }
      },
      "required": [
        "country",
        "currency",
        "client_name",
        "apis"
      ],
      "description": "The response object contains details of the API exchange endpoints for the MSISDN or MCC/MNC pair passed into the discovery request which are valid for the service providers application."
    }
  },
  "required": [
    "ttl",
    "response"
  ]
}

 

Response 400 Bad Request

Description

The MNC is not provided.

Headers

Content-Type: application/json

Body

{
  "error": "Invalid_Request",
  "description": "The Mnc value is not specified in this discovery request"
}

 

Response 400 Bad Request

Description

The MCC is not provided.

Headers

Content-Type: application/json

Body

{
  "error": "Invalid_Request",
  "description": "The Mcc value is not specified in this discovery request"
}

 

Response 400 Bad Request

Description

Redirect_URL is not provided.

Headers

Content-Type: application/json

Body

{
  "error": "Invalid_Request",
  "description": "Redirect_URL missing"
}

 

Response 401 Unauthorized

Description

The request credentials are not valid.

Headers

Content-Type: application/json

Body

{
  "error": "Unauthorized_Access",
  "description": "Please provide correct credentials"
}

 

Response 404 Not Found

Description

The MCC/MNC pairing does not match an operator

Headers

Content-Type: application/json

Body

{
  "error": "Not_Found_Entity",
  "description": "There is no organization with the specified mcc/mnc pair"
}

 

User selected MCC/MNC with POST

POST /v2/discovery

When the country and operator have been selected by the user via the Discovery UI, this is passed to the API Exchange via the Discovery API and the MNOs endpoints are returned.

Example URI

POST https://discovery.sandbox.mobileconnect.io/v2/discovery

Request

Headers

Content-Type: application/json
Authorization: Basic MDQ4MTZmMWYtOTAwMi00YjczLTkyNDAtZWQ2YjZhNWZhYjZmOmFiMjZkMmJkLTAzMTItNDE4OC1iYzA4LWE1MjdmYTFjMGQyMg==

Body

{
  "Redirect_URL": "https://localhost/,
  "Selected-MCC": "902",
  "Selected-MNC": "02",
}

Schema

{
  "type": "object",
  "properties": {
    "Redirect_URL": {
      "type": "string",
      "description": "The Redirect URL that you set when you create your Application that determines where Discovery Service sends responses to your OperatorSelection request.\n"
    },
    "Identified-MCC": {
      "type": "string",
      "description": "3 Digit Numeric "Mobile Country Code" of the device SIM Card obtained via Native (e.g. Android) application. `Identified-MCC` and `Identified-MNC` must be used together and are mutually exclusive witht the `Selected-*` parameters.\n"
    },
    "Identified-MNC": {
      "type": "string",
      "description": "2 Digit Numeric "Mobile Network Code" of the device SIM Card obtained via Native application.\n"
    },
    "Selected-MCC": {
      "type": "string",
      "description": "3 Digit Numeric "Mobile Country Code" of the response from the OperatorSelection WebApp. `Selected-MCC` and `Selected-MNC` must be used together and are mutually exclusive witht the `Identified-*` parameters.\n"
    },
    "Selected-MNC": {
      "type": "string",
      "description": "2 Digit Numeric "Mobile Network Code" of the response from the OperatorSelection WebApp.\n"
    },
    "Using-Mobile-Data": {
      "type": "boolean",
      "description": "Set to "true" if your application is able to determine that the user is accessing the service via mobile data. This tells Discovery Service to discover using the mobile-network.\n"
    },
    "MSISDN": {
      "type": "string",
      "description": "The mobile number in [E.164 number formatting](https://en.wikipedia.org/wiki/E.164) (i.e. international dialing format) of your user if you already obtained their number in the past."
    }
  },
  "required": [
    "Redirect_URL"
  ],
  "": "http://json-schema.org/draft-04/schema#"
}

 

Response 200 OK

Headers

Content-Type: application/json

Cookies

Name Value Domain Path Expires HTTP Secure
Most-Recent-Selected-Operator 5885cafbbba12f25546a9cdf discovery.sandbox.mobileconnect.io /v2 Never true false
Most-Recent-Selected-Operator-Expiry 2017-03-08T11:24:33.921586 discovery.sandbox.mobileconnect.io /v2 Never true false

Body

{
  "subscriber_id": null,
  "ttl": 1488452073,
  "response": {
    "serving_operator": "Example Operator B",
    "client_secret": "YWIyNmQyYmQtMDMxMi00MTg4LWJjMDgtYTUyN2ZhMWMwZDIyOm9wZXJhdG9yLWI=",
    "country": "US",
    "apis": {
      "operatorid": {
        "link": [
          {
            "rel": "authorization",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/authorize"
          },
          {
            "rel": "token",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/accesstoken"
          },
          {
            "rel": "userinfo",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/userinfo"
          },
          {
            "rel": "tokenrevoke",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/revoke"
          },
          {
            "rel": "premiuminfo",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/premiuminfo"
          },
          {
            "rel": "scope",
            "href": "openid profile email"
          },
          {
            "rel": "openid-configuration",
            "href": "https://operator-b.sandbox.mobileconnect.io/.well-known/openid-configuration"
          },
          {
            "rel": "jwks",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/operator-b/jwks.json"
          }
        ]
      }
    },
    "currency": "USD",
    "client_name": "TestApp",
    "client_id": "MDQ4MTZmMWYtOTAwMi00YjczLTkyNDAtZWQ2YjZhNWZhYjZmOm9wZXJhdG9yLWI="
  }
}

Schema

{
  "": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "ttl": {
      "type": "string",
      "description": "A unix timestamp indicating the "time to live" of the response object. A timestamp in the future indicates that this response may be cached to improve performance. The `ttl` value does not have to be in the future and if it's not, the response object should not be cached.\n"
    },
    "subscriber_id": {
      "type": "string",
      "description": "    MSISDN value encoded with operator RSA certificate that can be passed along as "login_hint" parameter of the Mobile Connect API. This response value is only available when the request contains an MSISDN on the `MSISDN` parameter. The `subscriber_id` is opaque to the service provider's application in that it cannot be decypted by the application - it can only be used to pass to the mobile connect API in order to streamline the users login (potentially saving them entering an MSISDN for a second time).\n"
    },
    "response": {
      "type": "object",
      "properties": {
        "client_id": {
          "type": "string",
          "description": "00a9-4421-90d0-82cf76eba7e0 (string, required)\n\nclient_id part of your credential to be used by OIDC requests. It's important to note that this will likely not be the same as the client_id used for the discovery request and it's not safe to assume the client_id will be the same (or a variation of) the discovery request key.\n"
        },
        "client_secret": {
          "type": "string",
          "description": "4e73-4bc0-91e7-16b40cf75c67 (string, required)\n\nclient_secret part of your credential to be used by OIDC requests. Much like the `client_id`, this may be different to the discovery request credential.\n"
        },
        "serving_operator": {
          "type": "string",
          "description": "The name of the users mobile network operator (MNO)."
        },
        "country": {
          "type": "string",
          "description": "The country name in which this network operates."
        },
        "currency": {
          "type": "string",
          "description": "The currency of the serving operator."
        },
        "client_name": {
          "type": "string",
          "description": "A short app name which can be used for the `client_name` parameter on mobile connect auth requests."
        },
        "apis": {
          "type": "object",
          "properties": {
            "operatorid": {
              "type": "object",
              "properties": {
                "link": {
                  "type": "array",
                  "description": "The links describe the available endpoints for the operator. These endpoints can be used to perform mobile connect operations for the discovered MSISDN or MNC/MCC pair.\n"
                }
              },
              "required": [
                "link"
              ]
            }
          },
          "required": [
            "operatorid"
          ],
          "description": "An object describing the available interfaces for this operator which currently includes mobile connect auth related endpoints, as well as premiuminfo endpoints."
        }
      },
      "required": [
        "country",
        "currency",
        "client_name",
        "apis"
      ],
      "description": "The response object contains details of the API exchange endpoints for the MSISDN or MCC/MNC pair passed into the discovery request which are valid for the service providers application."
    }
  },
  "required": [
    "ttl",
    "response"
  ]
}

 

 

User selected MNC/MCC: ignoring cookies

GET /v2/discovery{?Selected-MCC,Selected-MNC,Ignore-Cookies}

All discovery requests are able to make use of the Ignore-Cookies flag which is intended to make testing easier in situations where there the results are likely to change.

URI Parameters

Parameter Type Required Example
Redirect_URL string Yes https://localhost/
Selected-MCC string Yes 902
Selected-MNC string Yes 02
Ignore-Cookie string Yes true

 

Request

The following example uses the Sandbox

GET /v2/discovery?Redirect_URL=https://localhost&Selected-MCC=902&Selected%2DMNC=02&Ignore-Cookies=true

 

Headers

Content-Type: application/json
Authorization: Basic MDQ4MTZmMWYtOTAwMi00YjczLTkyNDAtZWQ2YjZhNWZhYjZmOmFiMjZkMmJkLTAzMTItNDE4OC1iYzA4LWE1MjdmYTFjMGQyMg==

 

Response 200 OK

Headers

Content-Type: application/json

Body

{
  "subscriber_id": null,
  "ttl": 1488452073,
  "response": {
    "serving_operator": "Example Operator B",
    "client_secret": "YWIyNmQyYmQtMDMxMi00MTg4LWJjMDgtYTUyN2ZhMWMwZDIyOm9wZXJhdG9yLWI=",
    "country": "US",
    "apis": {
      "operatorid": {
        "link": [
          {
            "rel": "authorization",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/authorize"
          },
          {
            "rel": "token",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/accesstoken"
          },
          {
            "rel": "userinfo",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/userinfo"
          },
          {
            "rel": "tokenrevoke",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/revoke"
          },
          {
            "rel": "premiuminfo",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/premiuminfo"
          },
          {
            "rel": "scope",
            "href": "openid profile email"
          },
          {
            "rel": "openid-configuration",
            "href": "https://operator-b.sandbox.mobileconnect.io/.well-known/openid-configuration"
          },
          {
            "rel": "jwks",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/operator-b/jwks.json"
          }
        ]
      }
    },
    "currency": "USD",
    "client_name": "TestApp",
    "client_id": "MDQ4MTZmMWYtOTAwMi00YjczLTkyNDAtZWQ2YjZhNWZhYjZmOm9wZXJhdG9yLWI="
  }
}

Schema

{
  "": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "ttl": {
      "type": "string",
      "description": "A unix timestamp indicating the "time to live" of the response object. A timestamp in the future indicates that this response may be cached to improve performance. The `ttl` value does not have to be in the future and if it's not, the response object should not be cached.\n"
    },
    "subscriber_id": {
      "type": "string",
      "description": "    MSISDN value encoded with operator RSA certificate that can be passed along as "login_hint" parameter of the Mobile Connect API. This response value is only available when the request contains an MSISDN on the `MSISDN` parameter. The `subscriber_id` is opaque to the service provider's application in that it cannot be decypted by the application - it can only be used to pass to the mobile connect API in order to streamline the users login (potentially saving them entering an MSISDN for a second time).\n"
    },
    "response": {
      "type": "object",
      "properties": {
        "client_id": {
          "type": "string",
          "description": "00a9-4421-90d0-82cf76eba7e0 (string, required)\n\nclient_id part of your credential to be used by OIDC requests. It's important to note that this will likely not be the same as the client_id used for the discovery request and it's not safe to assume the client_id will be the same (or a variation of) the discovery request key.\n"
        },
        "client_secret": {
          "type": "string",
          "description": "4e73-4bc0-91e7-16b40cf75c67 (string, required)\n\nclient_secret part of your credential to be used by OIDC requests. Much like the `client_id`, this may be different to the discovery request credential.\n"
        },
        "serving_operator": {
          "type": "string",
          "description": "The name of the users mobile network operator (MNO)."
        },
        "country": {
          "type": "string",
          "description": "The country name in which this network operates."
        },
        "currency": {
          "type": "string",
          "description": "The currency of the serving operator."
        },
        "client_name": {
          "type": "string",
          "description": "A short app name which can be used for the `client_name` parameter on mobile connect auth requests."
        },
        "apis": {
          "type": "object",
          "properties": {
            "operatorid": {
              "type": "object",
              "properties": {
                "link": {
                  "type": "array",
                  "description": "The links describe the available endpoints for the operator. These endpoints can be used to perform mobile connect operations for the discovered MSISDN or MNC/MCC pair.\n"
                }
              },
              "required": [
                "link"
              ]
            }
          },
          "required": [
            "operatorid"
          ],
          "description": "An object describing the available interfaces for this operator which currently includes mobile connect auth related endpoints, as well as premiuminfo endpoints."
        }
      },
      "required": [
        "country",
        "currency",
        "client_name",
        "apis"
      ],
      "description": "The response object contains details of the API exchange endpoints for the MSISDN or MCC/MNC pair passed into the discovery request which are valid for the service providers application."
    }
  },
  "required": [
    "ttl",
    "response"
  ]
}

 

 

Using MSISDN: ignoring cookies

POST /v2/discovery

Example URI

POST https://discovery.sandbox.mobileconnect.io/v2/discovery

Request

Headers

Content-Type: application/json
Authorization: Basic MDQ4MTZmMWYtOTAwMi00YjczLTkyNDAtZWQ2YjZhNWZhYjZmOmFiMjZkMmJkLTAzMTItNDE4OC1iYzA4LWE1MjdmYTFjMGQyMg==

Body

{
  "Redirect_URL": "https://localhost/",
  "MSISDN": "+447700900902",
  "Ignore-Cookie": "true",
}

 

Response 200 OK

Headers

Content-Type: application/json

Cookies

Name Value Domain Path Expires HTTP Secure
Most-Recent-Selected-Operator 5885cafbbba12f25546a9cdf discovery.sandbox.mobileconnect.io /v2 Never true false
Most-Recent-Selected-Operator-Expiry 2017-03-08T11:24:33.921586 discovery.sandbox.mobileconnect.io /v2 Never true false

Body

{
{
  "ttl": 1488885934,
  "subscriber_id": "465b2a9438353af28f4e77e21757a3065916ceca7e16352eb4ca189944801605626adcafb2934e08c068f7dc86d4098fcf686854be38e9c47401c1d33de6d04aeb2f60e784e0331ab3c06867b4a7ff347f88ea9971ca07cbdb8b0b5030f3cfc74bb030da7a27dab8f3020aa54492b510161c4947d6930c4f2c79d4ffef3caaec25629f6a070fd719269c1d75b015328c7503a4f7458a2f0f011ea53770b6e6479b62d6b2424116061d5ffffd41322014e0feab3d93fbd8c7d22e6d960943d5d0b4263ec576a16631ce1a2546912782cea4718df25dd1b6b3dffa91d2fa800aa6edb63ba90afdde601e2b36be3dde0297bf66cc2f6a07fe385d7f459e4e2d63fc",
  "response": {
    "client_id": "MDQ4MTZmMWYtOTAwMi00YjczLTkyNDAtZWQ2YjZhNWZhYjZmOm9wZXJhdG9yLWI=",
    "currency": "USD",
    "client_name": "TestApp",
    "country": "US",
    "apis": {
      "operatorid": {
        "link": [
          {
            "rel": "authorization",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/authorize"
          },
          {
            "rel": "token",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/accesstoken"
          },
          {
            "rel": "userinfo",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/userinfo"
          },
          {
            "rel": "tokenrevoke",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/revoke"
          },
          {
            "rel": "premiuminfo",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/premiuminfo"
          },
          {
            "rel": "scope",
            "href": "openid profile email"
          },
          {
            "rel": "openid-configuration",
            "href": "https://operator-b.sandbox.mobileconnect.io/.well-known/openid-configuration"
          },
          {
            "rel": "jwks",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/operator-b/jwks.json"
          }
        ]
      }
    },
    "serving_operator": "Example Operator B",
    "client_secret": "YWIyNmQyYmQtMDMxMi00MTg4LWJjMDgtYTUyN2ZhMWMwZDIyOm9wZXJhdG9yLWI="
  }
}

 

 

Response 404 Not Found

Description

The operator does not support Mobile Connect.

Headers

Content-Type: application/json

Body

{
  "error": "Not_Found_Entity",
  "description": "Operator not supported for the MSISDN supplied"
}

 

 

Response 404 Not Found

Description

The operator is not found based on MSISDN supplied.

Headers

Content-Type: application/json

Body

{
  "error": "Not_Found_Entity",
  "description": "We could not find your operator based on the MSISDN supplied"
}

 

Using MSISDN: server initiated

POST /v2/discovery

In certain circumstances (when appropriate contracts are in place) it may be possible to server initiated MSISDN based requests.

Example URI

POST https://discovery.sandbox.mobileconnect.io/v2/discovery

 

Request

Headers

Content-Type: application/urlencoded
Authorization: Basic MDQ4MTZmMWYtOTAwMi00YjczLTkyNDAtZWQ2YjZhNWZhYjZmOmFiMjZkMmJkLTAzMTItNDE4OC1iYzA4LWE1MjdmYTFjMGQyMg==
Accept: application/json

Body

{
  "Redirect_URL": "https://localhost/,
  "MSISDN": "+447700900902",
}

 

Response 200 OK

Headers

Content-Type: application/json

Cookies

Name Value Domain Path Expires HTTP Secure
Most-Recent-Selected-Operator 5885cafbbba12f25546a9cdf discovery.sandbox.mobileconnect.io /v2 Never true false
Most-Recent-Selected-Operator-Expiry 2017-03-08T11:24:33.921586 discovery.sandbox.mobileconnect.io /v2 Never true false

Body

{
  "ttl": 1488891354,
  "subscriber_id": "5c27fcc9e19beb5de2d026a7a3f9452a9370069080e04e14d0df2ed460a1645ffee4fc66a90abc207803dede1795032b61c78c2dd2b7132cba0e92856c171e1ec6ea33fe5929a0e81543093bad8788ad12d1c36b231f484b75d280e16bcf6684487663646a4414b8ca459ce8bed03e675f8c4ed458c304ceb29c56fcb495a760fb268be7b032c3029a4025a543cb717bc679199d964f4d58a5ae99027f44185e6c45f2662a1b0186cb3a0065b513b2860421efeec3f7019481a6dd3efbeca27188b3f3948af351d3dfa09d79d9dee4da202cbb37590d154b42bd96cb8d5b6947a4b55f35698b75fdace7ac9b7b58a99ab0e2603cb6c5c9af7dba3ce64466028f",
  "response": {
    "client_id": "MDQ4MTZmMWYtOTAwMi00YjczLTkyNDAtZWQ2YjZhNWZhYjZmOm9wZXJhdG9yLWI=",
    "currency": "USD",
    "client_name": "TestApp",
    "country": "US",
    "apis": {
      "operatorid": {
        "link": [
          {
            "rel": "authorization",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/authorize"
          },
          {
            "rel": "token",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/accesstoken"
          },
          {
            "rel": "userinfo",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/userinfo"
          },
          {
            "rel": "tokenrevoke",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/revoke"
          },
          {
            "rel": "premiuminfo",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/premiuminfo"
          },
          {
            "rel": "scope",
            "href": "openid profile email"
          },
          {
            "rel": "openid-configuration",
            "href": "https://operator-b.sandbox.mobileconnect.io/.well-known/openid-configuration"
          },
          {
            "rel": "jwks",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/operator-b/jwks.json"
          }
        ]
      }
    },
    "serving_operator": "Example Operator B",
    "client_secret": "YWIyNmQyYmQtMDMxMi00MTg4LWJjMDgtYTUyN2ZhMWMwZDIyOm9wZXJhdG9yLWI="
  }
}

Schema

{
  "": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "ttl": {
      "type": "string",
      "description": "A unix timestamp indicating the "time to live" of the response object. A timestamp in the future indicates that this response may be cached to improve performance. The `ttl` value does not have to be in the future and if it's not, the response object should not be cached.\n"
    },
    "subscriber_id": {
      "type": "string",
      "description": "    MSISDN value encoded with operator RSA certificate that can be passed along as "login_hint" parameter of the Mobile Connect API. This response value is only available when the request contains an MSISDN on the `MSISDN` parameter. The `subscriber_id` is opaque to the service provider's application in that it cannot be decypted by the application - it can only be used to pass to the mobile connect API in order to streamline the users login (potentially saving them entering an MSISDN for a second time).\n"
    },
    "response": {
      "type": "object",
      "properties": {
        "client_id": {
          "type": "string",
          "description": "00a9-4421-90d0-82cf76eba7e0 (string, required)\n\nclient_id part of your credential to be used by OIDC requests. It's important to note that this will likely not be the same as the client_id used for the discovery request and it's not safe to assume the client_id will be the same (or a variation of) the discovery request key.\n"
        },
        "client_secret": {
          "type": "string",
          "description": "4e73-4bc0-91e7-16b40cf75c67 (string, required)\n\nclient_secret part of your credential to be used by OIDC requests. Much like the `client_id`, this may be different to the discovery request credential.\n"
        },
        "serving_operator": {
          "type": "string",
          "description": "The name of the users mobile network operator (MNO)."
        },
        "country": {
          "type": "string",
          "description": "The country name in which this network operates."
        },
        "currency": {
          "type": "string",
          "description": "The currency of the serving operator."
        },
        "client_name": {
          "type": "string",
          "description": "A short app name which can be used for the `client_name` parameter on mobile connect auth requests."
        },
        "apis": {
          "type": "object",
          "properties": {
            "operatorid": {
              "type": "object",
              "properties": {
                "link": {
                  "type": "array",
                  "description": "The links describe the available endpoints for the operator. These endpoints can be used to perform mobile connect operations for the discovered MSISDN or MNC/MCC pair.\n"
                }
              },
              "required": [
                "link"
              ]
            }
          },
          "required": [
            "operatorid"
          ],
          "description": "An object describing the available interfaces for this operator which currently includes mobile connect auth related endpoints, as well as premiuminfo endpoints."
        }
      },
      "required": [
        "country",
        "currency",
        "client_name",
        "apis"
      ],
      "description": "The response object contains details of the API exchange endpoints for the MSISDN or MCC/MNC pair passed into the discovery request which are valid for the service providers application."
    }
  },
  "required": [
    "ttl",
    "response"
  ]
}

 

MSISDN based with user interaction

GET /v2/discovery{?Redirect_URL}

A normal MSISDN based discovery flow requires the user to be redirected to a Mobile Connect page served by the discovery service which permits them to enter their MSISDN or select their Operator. The first stage is to make the request in this section, which will return a 302. If the request is to be made outside of a browser, it is possible to use the JSON response version of this call.

The next part of this flow is for the user to be redirected back to the applications Redirect_URL by the discovery service, again by a 302 redirect. URL queries are added for the mcc_mnc (a string containing the Identified-MCC and the Identified-MNC separated by an _ character.

In addition, the response may contain a subscriber_id which can be used in OIDC requests so that the user doesn’t have to re-type their MSISDN.

Upon receiving the request to the redirect URL, the MCC_MNC pair can be used with a basic discovery request to get the OIDC API details for the selected operator.

URI Parameters

Parameter Type Required Example
Redirect_URL string Yes https://localhost/

 

Request

GET https://discovery.sandbox.mobileconnect.io/v2/discovery?Redirect_URL=https://localhost/

Headers

Authorization: Basic MDQ4MTZmMWYtOTAwMi00YjczLTkyNDAtZWQ2YjZhNWZhYjZmOmFiMjZkMmJkLTAzMTItNDE4OC1iYzA4LWE1MjdmYTFjMGQyMg==

 

Response 302 Moved Temporarily

The first 302 response redirects the user to the web based discovery service.

Header

Location: https://discovery.sandbox.mobileconnect.io/v2/discovery/users/operator-selection?dropdown=true&session_id=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE0ODg4MTUxMjAsImV4cCI6MTQ4ODgxNjAyMCwiYXBwbGljYXRpb24iOnsiZXh0ZXJuYWxfaWQiOiI2OTUiLCJuYW1lIjoiU2FuZGJveCBUZXN0IEFwcGxpY2F0aW9uIiwiZGV2ZWxvcGVyIjp7ImVtYWlsIjoiU0h1Z2hlc0BHU01BLmNvbSIsImlkZW50aXRpZXMiOltdfSwicmVkaXJlY3RfdXJpIjoiaHR0cHM6Ly9sb2NhbGhvc3QiLCJrZXlzIjp7InNhbmRib3giOnsia2V5IjoiMDQ4MTZmMWYtOTAwMi00YjczLTkyNDAtZWQ2YjZhNWZhYjZmIiwic2VjcmV0IjoiYWIyNmQyYmQtMDMxMi00MTg4LWJjMDgtYTUyN2ZhMWMwZDIyIn19fSwicmVkaXJlY3RfdXJpIjoiaHR0cHM6Ly9sb2NhbGhvc3QvIiwiaXNzIjoic2FuZGJveC5tb2JpbGVjb25uZWN0LmlvIn0.vZ3XK_zFrfe8fdlPoUGV0_OqU6UdcgxP_gquGOoJh_c

At this point the user will interact with the Discovery Service so that the users operator can be identified.

 

Response 302 Moved Temporarily

Once the user interaction is complete then the discovery service will respond back with the operators MCC and MNC and optionally the encrypted MSISDN (subscriber_id).

Header

Location: https://localhost/?mcc_mnc=902_02&subscriber_id=170ee2c3394fb4459ea8f95cbce50753eb46ad307107da81cbebc0a36b7d5a25c79c2235f9064c0e7cc251c1356e4409f7e1bf8546c83bf6fa766313e972ea6d175cc9697e8ef732607e911442e81d41c001df9b5029aeb6c2390b5db0e464c00945cef13e9b1700d19cdb97a3765eefa2b904b02d1aa12c2a7dc663cf99901aab46b82e941725657bad200c8b5974f95c8f5341b4935cb8e67a148e96a528e6cc4e52ff81da55d728ee9c73b6795e01bd468e278ddd76a8b2d5c49741303e001a73be93e61262ac7cd42e3a123cd3c790c2f60a3ce2679b92bc9f8614bcfb917419ae4a229321bb87e16f16b8cb0539e8113b2fb45d8282ccab54588b7b87a6

 

Using the MCC & MNC sent back in the previous response the users endpoints can then be retrieved. Note that we use Identified here, not Selected.

 

Response 401 Unauthorized

If the session_id is invalid then the request fails and all cookies are reset.

Headers

??

Body

< HTTP/1.1 401 Unauthorized
< X-Powered-By: Apigee
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Headers: Origin, X-Requested-With, X-Source-Ip, Accept, Authorization, User-Agent, Host, Accept-Language, Location, Referer, Set-Cookie
< Access-Control-Allow-Methods: GET, POST, OPTIONS
< Access-Control-Allow-Credentials: true
< Content-Type: application/json; charset=utf-8
< Set-Cookie: Most-Recent-Selected-Operator-Expiry=; Path=/; Expires%3DThu%2C%2001%20Jan%201970%2000%3A00%3A00%20GMT, Most-Recent-Selected-Operator=; Path=/; Expires%3DThu%2C%2001%20Jan%201970%2000%3A00%3A00%20GMT, Enum-Nonce=; Path=/; Expires%3DThu%2C%2001%20Jan%201970%2000%3A00%3A00%20GMT
< Content-Length: 87
< ETag: W/"57-b5b1e4a0"
< Date: Mon, 15 Dec 2014 05:48:06 GMT
< Connection: keep-alive
<
{
  "error": "Invalid_Session",
  "description": "Your request needs a valid session"
}

GET /v2/discovery{?Identified-MCC, Identified-MNC}

URI Parameters

Parameter Type Required Example
Identified-MCC string Yes 902
Identified-MNC string Yes 02
Redirect_URL string Yes https://localhost/

 

Request

GET https://discovery.sandbox.mobileconnect.io/v2/discovery?Identified-MCC=902&Identified-MNC=02&Redirect_URL=https://localhost/

 

Headers

Content-Type: application/json
Authorization: Basic MDQ4MTZmMWYtOTAwMi00YjczLTkyNDAtZWQ2YjZhNWZhYjZmOmFiMjZkMmJkLTAzMTItNDE4OC1iYzA4LWE1MjdmYTFjMGQyMg==

 

Response 200 OK

Headers

Content-Type: application/json

Cookies

Name Value Domain Path Expires HTTP Secure
Most-Recent-Selected-Operator 5885cafbbba12f25546a9cdf discovery.sandbox.mobileconnect.io /v2 Never true false
Most-Recent-Selected-Operator-Expiry 2017-03-08T11:24:33.921586 discovery.sandbox.mobileconnect.io /v2 Never true false

Body

{
  "ttl": 1488891354,
  "subscriber_id": "",
  "response": {
    "client_id": "MDQ4MTZmMWYtOTAwMi00YjczLTkyNDAtZWQ2YjZhNWZhYjZmOm9wZXJhdG9yLWI=",
    "currency": "USD",
    "client_name": "TestApp",
    "country": "US",
    "apis": {
      "operatorid": {
        "link": [
          {
            "rel": "authorization",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/authorize"
          },
          {
            "rel": "token",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/accesstoken"
          },
          {
            "rel": "userinfo",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/userinfo"
          },
          {
            "rel": "tokenrevoke",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/revoke"
          },
          {
            "rel": "premiuminfo",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/premiuminfo"
          },
          {
            "rel": "scope",
            "href": "openid profile email"
          },
          {
            "rel": "openid-configuration",
            "href": "https://operator-b.sandbox.mobileconnect.io/.well-known/openid-configuration"
          },
          {
            "rel": "jwks",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/operator-b/jwks.json"
          }
        ]
      }
    },
    "serving_operator": "Example Operator B",
    "client_secret": "YWIyNmQyYmQtMDMxMi00MTg4LWJjMDgtYTUyN2ZhMWMwZDIyOm9wZXJhdG9yLWI="
  }
}

 

Developer app sends MSISDN

POST /v2/discovery

Example URI

POST /v2/discovery

Request

Headers

Authorization: Basic ZmU0NDY1NDEtOTJmNy00MmVlLThjMzYtNTM0YmM4NmNmNWQ0OjU0NzY0YTcyLWFkNDQtNDlhZC04OTllLTI0OThlODdmYzdkZA==

Body

{
  "Redirect_URL": "https://localhost/discovered.html",
   "MSISDN": "+44234567890"
}

 

Response 200 OK

Direct discovery response with cookies set. Note the Enum-Nonce cookie - this is returned only for MSISDN based discovery. Also note the subscriber_id parameter in the response payload

Headers

Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, X-Requested-With, X-Source-Ip, Accept, Authorization, User-Agent, Host, Accept-Language, Location, Referer, Set-Cookie
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Credentials: true
Content-Type: application/json; charset=utf-8

Body

{
  "ttl": 1418876992275,
  "response": {
    "client_id": "XQNdLefAgGSgmcLAUl6RQvOxQOVAawXh",
    "client_secret": "biZoSofpT5lqwdvw",
    "subscriber_operator": "etelco_demo",
    "country": "US",
    "currency": "USD",
    "apis": {
      "messaging": {
        "link": [
          {
            "href": "http://example.url/sandbox/sacl/smsmessaging/v1/outbound/{senderAddress}/requests",
            "rel": "uri"
          },
          {
            "href": "GET,POST-/messaging/acr:Authorization/sendsms",
            "rel": "scope"
          }
        ]
      },
      "payment": {
        "link": [
          {
            "href": "http://example.url/v1/payment/acr:Authorization/transactions/amountReservation",
            "rel": "reserve"
          },
          {
            "href": "https://example.url/v1/payment/acr:Authorization/transactions/amount",
            "rel": "transactionstatus"
          },
          {
            "href": "http://example.url/v1/payment/acr:Authorization/transactions/amount",
            "rel": "charge"
          },
          {
            "href": "GET,POST-/payment/acr:Authorization/transactions/amount",
            "rel": "scope"
          }
        ]
      }
    }
  },
  "subscriber_id": "119376fe412e3754aacc1fbcc97fdeff617fdeb475358858c412fe51f497430ac7405219ecd45c500352331d20ae13f893ace5b1b6a0873179b4f9e5c78f7815c2d87005fb65578264a532a7b9c656d00d30a6aa86330b32e59d86e111befbb39228250d60a12021bf88e55c2b0afa62cb81a277f3b72a27f7af346db020410552fb88eea0cc611a1187751acfa7a7ba20750efe79b32e19a36271f8a9b9314b09d665e99748e4d857a1a73f29bb156fdf93ad319bef1179af01fa95def72b1dfddcd1cc35c2977ac14b8eac7165f144caf2f4d6f8b55f1998b018fbd140c2c233d1473dfc996edbe0f75875f3df7fe03c710fe8de2f4a3cef8d419f26fa874e"
}

 

GET /v2/discovery{?Redirect_URL}

In this case the client sends all three cookies

  • Most-Recent-Selected-Operator: Indicates an operator from previous discovery.
  • Most-Recent-Selected-Operator-Expiry: Indicates that the other cookie can be used.
  • Enum-Nonce: Contains an encrypted value of the MSISDN used in previous discover.

Example URI

GET /v2/discovery?Redirect_URL

URI Parameters

Redirect_URL string (required) Example: https://example.com/discovered

Request

Headers

Authorization: Basic ZmU0NDY1NDEtOTJmNy00MmVlLThjMzYtNTM0YmM4NmNmNWQ0OjU0NzY0YTcyLWFkNDQtNDlhZC04OTllLTI0OThlODdmYzdkZA==
Accept: application/json
Cookie: Most-Recent-Selected-Operator=001_02
Cookie: Enum-Nonce=db2a9d9066a9e72cf545220318
Cookie: Most-Recent-Selected-Operator-Expiry=Tue%20Dec%2017%202015%2013%3A34%3A40%20GMT%2B0530

 

Response 200 OK

If the Enum-Nonce cookie contains an MSISDN which still resolves to the same mcc mnc as found in the Most Recent-Selected-Operator cookie then a standard discovery response is sent back with refreshed valies of the cookies. (Including the Enum Nonce cookie.)

Headers

Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, X-Requested-With, X-Source-Ip, Accept, Authorization, User-Agent, Host, Accept-Language, Location, Referer, Set-Cookie
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Credentials: true
Content-Type: application/json; charset=utf-8

Body

{
    Standard discovery response with subscriber_id paramter
}

If the mcc/mnc of the MSISDN has changed then this is treated as a fresh discovery and operator selection process is invoked. The response will contain a 302 redirect to the operator selection page.

 

GET /v2/discovery{?Redirect_URL}

In this case the client sends two cookies

  • Most-Recent-Selected-Operator: Indicates an operator from previous discovery.
  • Most-Recent-Selected-Operator-Expiry: Indicates that the other cookie can be used.

Example URI

GET /v2/discovery?Redirect_URL

URI Parameters

Redirect_URL string (required) Example: https://example.com/discovered

Request

Headers

Authorization: Basic ZmU0NDY1NDEtOTJmNy00MmVlLThjMzYtNTM0YmM4NmNmNWQ0OjU0NzY0YTcyLWFkNDQtNDlhZC04OTllLTI0OThlODdmYzdkZA==
Accept: application/json
Cookie: Most-Recent-Selected-Operator=001_02
Cookie: Most-Recent-Selected-Operator-Expiry=Tue%20Dec%2017%202015%2013%3A34%3A40%20GMT%2B0530

 

Response 200 OK

If the Enum-Nonce cookie contains an MSISDN which still resolves to the same mcc mnc as found in the Most Recent-Selected-Operator cookie then a standard discovery response is sent back with refreshed valies of the cookies. (Including the Enum Nonce cookie.)

Headers

Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, X-Requested-With, X-Source-Ip, Accept, Authorization, User-Agent, Host, Accept-Language, Location, Referer, Set-Cookie
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Credentials: true
Content-Type: application/json; charset=utf-8

Body

{
    Standard discovery response with subscriber_id paramter
}

 

Requesting a JSON response

GET /v2/discovery{?Redirect_URL}

Example URI

GET /v2/discovery?Redirect_URL=https:/example.com/discovered

URI Parameters

Redirect_URL string (required) Example: https://example.com/discovered

Request Discovery

Headers

Authorization: Basic ZmU0NDY1NDEtOTJmNy00MmVlLThjMzYtNTM0YmM4NmNmNWQ0OjU0NzY0YTcyLWFkNDQtNDlhZC04OTllLTI0OThlODdmYzdkZA==
Accept: application/json

 

Response 200 OK

Headers

Content-Type: application/json

Body

{
  "links": [
    {
      "href": "https://discover.mobileconnect.io/sb1/v2/discovery/users/operator",
      "rel": "operatorSelection"
    }
  ]
}

Schema

{
  "": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "links": {
      "type": "array",
      "description": "The links array contains a single link which should be opened in a web view in order to allow the user to complete the discovery steps.\n"
    }
  }
}

 

IP based using mobile data

GET /v2/discovery?Redirect_URL

In cases where there is a server/client application and the server is making the Discovery request then the server application can pick up the clients IP address and use it in the request. This will allow the Discovery service to attempt identify the users operator using their IP address. The Using-Mobile-Data header should also be set to 'true’.

This functionality can be tested with the Sandbox using the the test operator IP addresses defined here.

NOTE: If this is used with other parameters (such as Selected-MCC/MNC) then this will be ignored.

Example URI

GET /v2/discovery?Redirect_URL=https:/localhost&X-Source-IP=10.0.0.2

URI Parameters

Redirect_URL string (required) Example: https://example.com/discovered

X-Source-IP string (optional) Example: 10.0.0.2

Request

Headers

Content-Type: application/json
Authorization: Basic MDQ4MTZmMWYtOTAwMi00YjczLTkyNDAtZWQ2YjZhNWZhYjZmOmFiMjZkMmJkLTAzMTItNDE4OC1iYzA4LWE1MjdmYTFjMGQyMg==

 

Response 200 OK

Body

{
  "subscriber_id": null,
  "ttl": 1488452073,
  "response": {
    "serving_operator": "Example Operator B",
    "client_secret": "YWIyNmQyYmQtMDMxMi00MTg4LWJjMDgtYTUyN2ZhMWMwZDIyOm9wZXJhdG9yLWI=",
    "country": "US",
    "apis": {
      "operatorid": {
        "link": [
          {
            "rel": "authorization",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/authorize"
          },
          {
            "rel": "token",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/accesstoken"
          },
          {
            "rel": "userinfo",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/userinfo"
          },
          {
            "rel": "tokenrevoke",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/revoke"
          },
          {
            "rel": "premiuminfo",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/premiuminfo"
          },
          {
            "rel": "scope",
            "href": "openid profile email"
          },
          {
            "rel": "openid-configuration",
            "href": "https://operator-b.sandbox.mobileconnect.io/.well-known/openid-configuration"
          },
          {
            "rel": "jwks",
            "href": "https://operator-b.sandbox.mobileconnect.io/oidc/operator-b/jwks.json"
          }
        ]
      }
    },
    "currency": "USD",
    "client_name": "TestApp",
    "client_id": "MDQ4MTZmMWYtOTAwMi00YjczLTkyNDAtZWQ2YjZhNWZhYjZmOm9wZXJhdG9yLWI="
  }
}