The Customer Bill France API gives you information for Orange customers authenticating on your service through the Orange Authentication API. It can typically be used to retrieve the last month customer bill(s) from Orange (PDF format). It is applicable to any mass-market Orange France customer, and includes SOSH customers.
You will need the end-user's consent in order to access his information. A dedicated UI is provided with the Orange Authentication API.
Before starting
Our Customer Bill France API requires a 3-legged authentication with our OpenID Connect platform. Please follow the method described here, with customer_bill_last
scope, in order to get an access token
that will be granted to retrieve end-user's claims.
Retrieve Orange customer's information
You need a valid access token to invoke the Customer Bill France API. This access token must be provided in the HTTP Authorization header:
curl -X GET \
-H "Authorization: {authorization_header}" \
https://api.orange.com/customerbill/fr/v1/premiuminfo
As an example:
curl -X GET -H "Authorization: Bearer OFR_FJSyJ...Gms_a92e3fb8b16...0a75ef4"
"https://api.orange.com/customerbill/fr/v1/premiuminfo"
a/ If the transaction succeed
In the context of the Customer Bill France API, the customer_bill_last
scope gives permissions to the following claims only:
Claim | Type | Description | |
---|---|---|---|
sub | string | Subject - Issuer identifier for the end-user. | |
updated_at | number | Time the end-user's information was last updated. Its value is a JSON number representing the number of seconds from 1970-01-01T0:0:0Z as measured in UTC until the date/time. | |
customer_bills | array of JSON objects | Informations about last customer bill(s) linked to user's account(s) (mobile and/or internet). See 'CustomerBill' structure below. |
The 'CustomerBill' JSON object provides descriptive metadata of the Orange customer's bill. It is bound of the following attributes:
|Attribute|Type|Description| | |:-:|:-:|:-| | |contract_type
|string|The type of the contract (enumeration: [mobile,internet]). | | |file_id
|string|Content ID of MIME part / PDF document (URN format. E.g. cid:888f72...e8f@orange.fr). | | |creation_date
|dateTime|Creation date/time (ISO-8601 format. E.g. 2016-07-13T04:29:52+01:00). | |
On success, the PremiumInfo request returns a 200 OK HTTP status code with JSON data containing requested claims about the end-user.
HTTP/1.1 200 OK
Content-Type: multipart/related ;boundary="=_963c34cabe7ebdb48811182c420494f8"; type=application/json;
start="<9d3238f13ad5ac908f7e5642bb32276b@orange.fr>"; start-info="<9d3238f13ad5ac908f7e5642bb32276b@orange.fr>,
<1cf87722739cb13783f1824ef549b791@orange.fr>"
Content-Encoding: gzip
Transfer-Encoding: chunked
X-OAPI-Request-Id: OPOPECBALLRT01_CWDM2W5PI_RouterProxy-8-3319067_1
--=_963c34cabe7ebdb48811182c420494f8
Content-Type: application/json; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-ID: <9d3238f13ad5ac908f7e5642bb32276b@orange.fr>
{
"sub": "PBYJJF-200-DwltrLnXq+7jwTQEkOx9Z9jelg0t0NQrxWFasUgUgEs=",
"updated_at": 1470747915,
"customer_bills": [
{
"contract_type": "mobile",
"file_id":"cid:3438f5ceb1f97bca26f500b2f703d17d@orange.fr",
"creation_date":"2016-08-09T15:05:15+0200"
},
{
"contract_type": "internet",
"file_id":"cid:1cf87722739cb13783f1824ef549b791@orange.fr",
"creation_date":"2016-08-09T15:05:15+0200"
}
]
}
--=_963c34cabe7ebdb48811182c420494f8
Content-Type: application/pdf; charset=IBM850
Content-Transfer-Encoding: 8bit
Content-ID: <3438f5ceb1f97bca26f500b2f703d17d@orange.fr>
Content-Disposition: attachment; filename="FactureM.pdf"
%PDF-1.4
...
%%EOF
--=_963c34cabe7ebdb48811182c420494f8
Content-Type: application/pdf; charset=IBM850
Content-Transfer-Encoding: 8bit
Content-ID: <1cf87722739cb13783f1824ef549b791@orange.fr>
Content-Disposition: attachment; filename="FactureI.pdf"
%PDF-1.4
...
%%EOF
--=_963c34cabe7ebdb48811182c420494f8--
If no bill is available for the authenticated end-user, the customer_bills array is empty (see below).
HTTP/1.1 200 OK
Content-Length: 129
Content-Type: application/json; charset=utf-8
Date: Tue, 20 May 2016 21:08:27 GMT
X-OAPI-Request-Id: OPOPECBALLRT01_CWDM2W5PI_RouterProxy-8-3319067_1
{
"sub": "PBYJJF-200-DwltrLnXq+7jwTQEkOx9Z9jelg0t0NQrxWFasUgUgEs=",
"updated_at": 1470747915,
"customer_bills": []
}
b/ If the transaction failed
In case of error, the PremiumInfo endpoint returns an error response (JSON format) with the following information:
- code (required): single ASCII error code
- message (required): short localized string that describes the error.
- description (optional): human-readable ASCII text providing additional information, used to assist the developer in understanding the error that occurred.
If the access_token
is missing, a 401 Unauthorized HTTP status code is returned.
HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8
{
"code": 40,
"message": "Missing or invalid credentials",
"description": "The requested service needs credentials, but the ones provided were invalid or missing."
}
If the access_token
is expired, revoked or invalid, a 401 Unauthorized HTTP status code is returned. In that case, you'll have to renew the access token.
HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8
{
"code": 41,
"message": "Invalid credentials",
"description": "access token resource OFR_FJSyJ...Gms_a92e3fb8b16...0a75ef4 not found"
}
If the user is not eligible, a 403 Forbidden HTTP status code is returned with the following JSON response:
HTTP/1.1 403 Forbidden
Content-Type: application/json; charset=utf-8
{
"code": 1590,
"message": "User identifier is not eligible",
...
}
If the user doesn't exist, a 404 Not Found HTTP status code is returned with the following JSON response:
HTTP/1.1 404 Not Found
Content-Type: application/json; charset=utf-8
{
"code": 1591,
"message": "User identifier does not exist",
...
}
See API Reference section for the exhaustive list of error codes.