Table of contents
- Introduction
- Authentication prerequisite
- Base URL
- Address Validation Management
- Geographic Site Management
- Product Offering Qualification Management
- Quote Management
- Product Order Management
- Product Inventory Management
- Pagination
- Errors
- Contact us
- Using Postman on your PC or Mac
Introduction
Orange IC API provides set of API based on MEF standard to enable service automation with its customers. This set of APIs address all the phases of the lifecycle including the pre-order (address validation, site queries, product offering qualification and quote), ordering and inventory.
The EVPL Sandbox is a testing environnement for our customers and their developers. It is used to let you discover the EVPL API or to allow your developer team to validate their code before migrating it to the production environment.
It is requested to sign a contract with the Sales/Marketing department of Orange International Carrier to access this service See the section Subscription in 3 steps.
MEF documentations:
- https://www.mef.net/mef-apis/east-west-apis/lso-sonata/
- https://www.mef.net/service-standards/underlay/carrier-ethernet/
- https://github.com/MEF-GIT/MEF-LSO-Sonata-SDK
Authentication prerequisite
Access to this API is secured by the OAuth 2.0 framework with the Client Credentials grant type, which means that you will have to present an OAuth 2.0 access_token
whenever you want to request this API.
It's easy to negotiate this access_token
, just send a request to the proper token negotiation endpoint, with a Basic Authentication header valued with your own client_id
and client_secret
or 'Authorization header' to:
https://ope-obs.apibackbone.orange.com/oauth/v3/token
A technical guide is available to learn how to negotiate and manage these access_token
.
Example:
curl --location --request POST 'https://ope-obs.apibackbone.orange.com/oauth/v3/token' --header 'Authorization: Basic NHJXTXXXXXduNHczSDRVN29kemU3WQ==' --header 'Content-Type: application/x-www-form-urlencoded' --header 'Accept: application/json' --data-urlencode 'grant_type=client_credentials'
Response:
{
"token_type": "Bearer",
"access_token": "3c5GUeBmeV5yzlOqqMPmjxtC9AAJ",
"expires_in": 3600
}
"expires_in" value is in seconds.
Important
Please pay particular attention to properly handle authentication error responses in your application (See the section Errors).
Base URL
The Base URL is the first part of the full invocation URL, just before the resource paths defined in the API reference.
The Base URL is comprised of the scheme ('https'), the authority (i.e. the Fully Qualified Domain Name) and the API base path.
Whenever you request this API and encounter a 404 NOT FOUND HTTP error response, please check first that the Base URL is correct.
The Base URL for this API is:
https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/{name-of-api}/{API version}/{name-of-resource}
Currently, the {API version} = v1.
The documentation below assumes that, whenever you make requests on this API, you are prepending the Base URL to the resource paths defined for this API.
Address Validation Management
It allows to retrieve address information including exact formats, for addresses known to Orange IC.
The uses cases supported are:
- Validate Address;
- Retrieve Address by Identifier.
To consult the geographicAddressManagement MEF reference (MEF_121.md).
POST GeographicAddressValidation operation
Resource | Method | Description |
---|---|---|
/geographicAddressManagement/sbx/v1/geographicAddressValidation | POST | This operation creates a GeographicAddressValidation entity |
Input and output parameters
Consult the geographicAddressManagement api-reference.
curl -X POST 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/geographicAddressManagement/v1/geographicAddressValidation' -H 'Authorization: Basic HKUIH89jjhgfdfdf6fdol98VcGTrFd67f8=' -H 'Content-Type: application/json' --data-raw
{
"provideAlternative": true,
"submittedGeographicAddress": {
"@type": "FieldedAddress",
"@schemaLocation": "",
"associatedGeographicAddress": {
"country": "france",
"streetType": "rue",
"postcodeExtension": "",
"city": "Bézons",
"streetNr": "12",
"locality": "",
"postcode": "95870",
"streetNrLast": "",
"streetNrSuffix": "",
"streetName": "des fleurs",
"stateOrProvince": "",
"streetNrLastSuffix": "",
"geographicSubAddress": {
"buildingName": "",
"subUnit": [{
"subUnitNumber": "",
"subUnitType": ""
}
],
"levelType": "",
"levelNumber": "",
"privateStreetNumber": "",
"privateStreetName": ""
},
"streetSuffix": ""
}
},
"@type": "GeographicAddressValidation"
}
Response:
{
"validationResult": "success",
"provideAlternative": true,
"submittedGeographicAddress": {
"associatedGeographicAddress": {
"country": "france",
"streetType": "rue",
"city": "Bézons",
"streetNr": "12",
"postcode": "95870",
"streetName": "des fleurs"
}
},
"bestMatchGeographicAddress": {
"hasPublicSite": false,
"@type": "FieldedAddress",
"allowsNewSite": true,
"id": "22482972",
"associatedGeographicAddress": {
"country": "France",
"streetType": "rue",
"city": "bezons",
"streetNr": "12",
"postcode": "95870",
"streetName": "des fleurs"
}
},
"@type": "GeographicAddressValidation"
}
GET GeographicAddress operation
Resource | Method | Description |
---|---|---|
/geographicAddressManagement/sbx/v1/geographicAddress/{id} | GET | This operation retrieves a GeographicAddress entity. Attribute selection is enabled for all first level attributes. |
Input and output parameters
Consult the geographicAddressManagement api-reference.
curl -X GET 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/geographicAddressManagement/v1/geographicAddress/22482972' -H 'Authorization: Basic ZmFjdG9yeTpFcmIPYIUIOYUIYIY8UIY9Ykiu8=' --data-raw ''
Response:
{
"hasPublicSite": false,
"@type": "GeographicAddress",
"allowsNewSite": true,
"id": "22482972",
"associatedGeographicAddress": {
"country": "France",
"streetType": "rue",
"city": "bezons",
"streetNr": "12",
"postcode": "95870",
"streetName": "des fleurs"
}
}
Geographic Site Management
This API allows to retrieve a list of Geographic site and to get all information for one geographic site. A geographic site is a fixed physical location at which a Product can be installed. Its location can be described with an Address or Address Reference. Geographic Site API used TMF 674 as template.
The uses cases supported are:
- Retrieve a list of service site;
- Retrieve service site full details.
To consult the geographicSiteManagement MEF reference (MEF_121.md).
Get GeographicSite operation
Resource | Method | Description |
---|---|---|
/geographicSiteManagement/sbx/v1/geographicSite | GET | The Buyer requests that the Seller provides a list of Service Sites known to the Seller based on a set of Site/Address filter criteria. For each Service Site returned, the Seller also provides a Service Site Identifier, which uniquely identifies this Service Site within the Seller. |
Input and output parameters
Consult the geographicSiteManagement api-reference.
GeographicSite example 1: Retrieve all Orange IC Service Site
curl -X GET 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/geographicSiteManagement/v1/geographicSite/'
-H 'Authorization: Bearer d6WRbX3BXn52A6OmWCRNRFBGFE3p'
Response:
[
{
"id": "1265904",
"status": "existing",
"geographicAddress": {
"formattedAddress": {
"addrLine1": "Boulevard de Marseille",
"city": "Abidjan",
"stateOrProvince": "ABIDJAN",
"postcode": "CP 01",
"country": "Ivory Coast",
"locality": "Abidjan"
}
},
"siteName": "Abidjan KM4",
"siteType": "public"
},
{
"id": "1354977",
"status": "existing",
"geographicAddress": {
"formattedAddress": {
"addrLine1": "King Abdullah the Second street",
"city": "Amman",
"stateOrProvince": "AMMAN",
"postcode": "1118",
"country": "Jordan",
"locality": "Amman"
}
},
"siteName": "Aman Hashim Datacenter",
"siteType": "public"
},
{
"id": "105740",
"status": "existing",
"geographicAddress": {
"formattedAddress": {
"addrLine1": "7, avenue Gambetta",
"city": "Bagnolet",
"stateOrProvince": "EUROPE_ZONE1",
"postcode": "93177",
"country": "France",
"locality": "Paris"
}
},
"siteName": "Bagnolet",
"siteType": "public"
}
]
GeographicSite example 2: Retrieve all Orange IC Service Site located in Paris
curl -X GET 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/geographicSiteManagement/v1/geographicSite/?geographicAddress.city=Paris'
-H 'Authorization: Bearer d6WRbX3BXn52A6OmWCRNRFBGFE3p'
Response:
[
{
"id": "105740",
"status": "existing",
"geographicAddress": {
"formattedAddress": {
"addrLine1": "7, avenue Gambetta",
"city": "Bagnolet",
"stateOrProvince": "EUROPE_ZONE1",
"postcode": "93177",
"country": "France",
"locality": "Paris"
}
},
"siteName": "Bagnolet",
"siteType": "public"
}
]
Get GeographicSite/{id} operation
Resource | Method | Description |
---|---|---|
/geographicSiteManagement/v1/geographicSite/{id} | GET | A request to retrieve full details of a single POP based on a Service Site identifier that was previously provided by the Get GeographicSite operation. |
Input and output parameters
Consult the geographicSiteManagement api-reference.
GeographicSite example 3: Retrieve Service Site details by Identifier
curl -X GET 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/geographicSiteManagement/v1/geographicSite/105740'
-H 'Authorization: Bearer d6WRbX3BXn52A6OmWCRNRFBGFE3p'
Response:
{
"id": "105740",
"status": "existing",
"siteName": "Bagnolet",
"siteType": "public",
"formattedAddress": {
"addrLine1": "7, avenue Gambetta",
"city": "Bagnolet",
"postcode": "93177",
"country": "France",
"locality": "Paris"
}
}
Product Offering Qualification Management
The Product Offering Qualification (POQ) API allows a Buyer to check whether the Seller can deliver a product or set of products from among their product offerings at the geographic address or a service site specified by the Buyer, or modify a previously purchased product.
The uses cases supported are:
- Create a Product Offering Qualification (POQ).
To consult Product Offering Qualification MEF reference.
Create a Product Offering Qualification operation
Resource | Method | Description |
---|---|---|
/productOfferingQualificationManagement/v1/productOfferingQualification | POST | Allows the Buyer to determine whether it is feasible for Orange IC to deliver the EVPL Product with a given configuration to a particular geographic location. |
Input and output parameters
Consult the productOfferingQualificationManagement api-reference.
POQ example 1: create product (two new interfaces)
curl -X POST 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/productOfferingQualificationManagement/v1/productOfferingQualification'
-H 'Content-Type: application/json;charset=utf-8'
-H 'Authorization: Bearer d6WRbX3BXn52A6OmWCRNRFBGFE3p'
--data-raw 'Body'
Body:
{
"provideAlternative": true,
"requestedResponseDate": "2021-04-04T03:25:35.967Z",
"relatedParty": [
{
"role": "buyer"
}
],
"productOfferingQualificationItem": [
{
"id": "1",
"action": "add",
"product": {
"productSpecification": {
"id": "TransitELine"
},
"productConfiguration": {
"bandwidth": 4,
"@type": "EVPL"
}
},
"productOffering": {
"id": "Intense"
},
"productOfferingQualificationItemRelationship": [
{
"type": "hasENNIEndPoint",
"id": "2"
},
{
"type": "hasENNIEndPoint",
"id": "3"
}
]
},
{
"id": "2",
"action": "add",
"product": {
"productSpecification": {
"id": "ENNI"
},
"productOffering": {
"id": "AccessInterface"
},
"place": [
{
"id": "1265904",
"role": "ENNI Site",
"@type": "PlaceRef",
"@referredType": "GeographicSite"
}
]
}
},
{
"id": "3",
"action": "add",
"product": {
"productSpecification": {
"id": "ENNI"
},
"productOffering": {
"id": "AccessInterface"
},
"place": [
{
"id": "1354977",
"role": "ENNI Site",
"@type": "PlaceRef",
"@referredType": "GeographicSite"
}
]
}
}
]
}
Response:
{
"id": "75b2b6da-d52e-470e-9e92-b39841435c00",
"state": "done",
"relatedParty": [
{
"role": "billing",
"number": "+33 600000001",
"name": "Vincent Acme",
"emailAddress": "billing@mail.com",
"firstName": "Vincent",
"lastName": "Acme",
"companyName": "ACME",
"streetAddress": "Rue de Paris",
"postCode": "75003",
"country": "France",
"city": "Paris",
"title": "DAF"
},
{
"role": "commercial",
"number": "+33123456788",
"name": "Henry Martin",
"emailAddress": "commercial@mailtest.com",
"firstName": "Henry",
"lastName": "Martin",
"companyName": "Test Company",
"streetAddress": "6 avenue de Gaulle",
"postCode": "75001",
"country": "France",
"city": "Paris",
"title": "Commercial"
},
{
"role": "developer",
"number": "+33 600000001",
"name": "Joan Developer",
"emailAddress": "developer@acme.com",
"firstName": "Joan",
"lastName": "Developer",
"companyName": "ACME",
"streetAddress": "Rue de Paris",
"postCode": "75003",
"country": "France",
"city": "Paris",
"title": "Developer"
},
{
"role": "orangeCommercial",
"number": "+33 600000001",
"name": "Jack Orange-Commercial",
"emailAddress": "orange.commercial@acme.com",
"firstName": "Jack",
"lastName": "Orange-Commercial"
},
{
"role": "gdpr",
"number": "+33 600000001",
"name": "Jill Rgpd",
"emailAddress": "rgpd@acme.com",
"firstName": "Jill",
"lastName": "Rgpd"
},
{
"role": "fault",
"number": "0125555555",
"name": "FAULTTEST",
"emailAddress": "sav@testmail.com",
"lastName": "FAULTTEST"
},
{
"role": "signatory",
"name": "Paul Dubois",
"emailAddress": "signatory@mail.com",
"firstName": "Paul",
"lastName": "Dubois"
},
{
"role": "technical",
"number": "0160000000",
"name": "Amandine Bernard",
"emailAddress": "technical@mailtest.com",
"firstName": "Amandine",
"lastName": "Bernard",
"companyName": "Test Company",
"streetAddress": "3 rue Michel",
"postCode": "75000",
"country": "France",
"city": "Paris",
"title": "Ingenior"
},
{
"role": "buyer",
"id": "27117624",
"number": "+33234567890",
"emailAddress": "test@mail.com"
}
],
"productOfferingQualificationItem": [
{
"id": "1",
"state": "done",
"action": "add",
"serviceabilityConfidence": "green",
"installationInterval": {
"amount": 5,
"timeUnit": "businessDays"
},
"guaranteedUntilDate": "2021-04-04T01:20:56Z",
"product": {
"productSpecification": {
"id": "TransitELine"
},
"productConfiguration": {
"bandwidth": 4,
"@type": "EVPL"
}
},
"productOffering": {
"id": "Intense"
},
"productOfferingQualificationItemRelationship": [
{
"type": "hasENNIEndPoint",
"id": "2"
},
{
"type": "hasENNIEndPoint",
"id": "3"
}
]
},
{
"id": "2",
"state": "done",
"action": "add",
"serviceabilityConfidence": "green",
"installationInterval": {
"amount": 0,
"timeUnit": "businessHours"
},
"guaranteedUntilDate": "2021-04-04T01:20:56Z",
"product": {
"productSpecification": {
"id": "ENNI"
},
"productOffering": {
"id": "AccessInterface"
},
"place": [
{
"id": "1265904",
"role": "ENNI Site",
"@type": "PlaceRef",
"@referredType": "GeographicSite"
}
]
}
},
{
"id": "3",
"state": "done",
"action": "add",
"serviceabilityConfidence": "green",
"installationInterval": {
"amount": 0,
"timeUnit": "businessHours"
},
"guaranteedUntilDate": "2021-04-04T01:20:56Z",
"product": {
"productSpecification": {
"id": "ENNI"
},
"productOffering": {
"id": "AccessInterface"
},
"place": [
{
"id": "1354977",
"role": "ENNI Site",
"@type": "PlaceRef",
"@referredType": "GeographicSite"
}
]
}
}
],
"provideAlternative": true,
"effectiveQualificationCompletionDate": "2021-04-04T01:20:56Z",
"requestCurrency": "EUR"
}
POQ example 2: create product (an existing interface and a new interface)
curl -X POST 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/productOfferingQualificationManagement/v1/productOfferingQualification'
-H 'Content-Type: application/json;charset=utf-8'
-H 'Authorization: Bearer d6WRbX3BXn52A6OmWCRNRFBGFE3p'
--data-raw 'Body'
Body:
{
"provideAlternative": true,
"requestedCurrency": "EUR",
"relatedParty": [{
"role": "buyer"
}
],
"productOfferingQualificationItem": [{
"id": "1",
"action": "add",
"product": {
"productSpecification": {
"id": "TransitELine"
},
"productConfiguration": {
"bandwidth": 2,
"@type": "EVPL"
},
"productRelationship": [{
"type": "hasENNIEndPoint",
"product": {
"id": "ROUTA659-GigabitEth0-0-0-13"
}
}
]
},
"productOffering": {
"id": "Intense"
},
"productOfferingQualificationItemRelationship": [{
"type": "hasENNIEndPoint",
"id": "2"
}
]
}, {
"id": "2",
"action": "add",
"product": {
"productSpecification": {
"id": "ENNI"
},
"productOffering": {
"id": "AccessInterface"
},
"place": [{
"id": "1354977",
"role": "ENNI Site",
"@type": "PlaceRef",
"@referredType": "GeographicSite"
}
]
}
}
]
}
POQ example 3: create product (existing interfaces -Transit Eline)
curl -X POST 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/productOfferingQualificationManagement/v1/productOfferingQualification'
-H 'Content-Type: application/json;charset=utf-8'
-H 'Authorization: Bearer d6WRbX3BXn52A6OmWCRNRFBGFE3p'
--data-raw 'Body'
Body:
{
"provideAlternative": false,
"relatedParty": [
{
"role": "buyer"
}
],
"productOfferingQualificationItem": [
{
"id": "1",
"action": "add",
"product": {
"productSpecification": {
"id": "TransitELine"
},
"productConfiguration": {
"@type": "EVPL",
"bandwidth": 200
},
"productRelationship": [
{
"type": "hasENNIEndPoint",
"product": {
"id": "ROUTA591-TenGigEth1-0-5"
}
},
{
"type": "hasENNIEndPoint",
"product": {
"id": "ROUTA659-TenGigEth1-0-6"
}
}
]
},
"productOffering": {
"id": "Intense"
}
}
]
}
POQ example 4: Updating an existing product (bandwith or class of service)
curl -X POST 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/productOfferingQualificationManagement/v1/productOfferingQualification'
-H 'Content-Type: application/json;charset=utf-8'
-H 'Authorization: Bearer d6WRbX3BXn52A6OmWCRNRFBGFE3p'
--data-raw 'Body'
Body:
{
"provideAlternative": true,
"requestedCurrency": "EUR",
"relatedParty": [
{
"role": "buyer"
}
],
"productOfferingQualificationItem": [
{
"id": "LDD01100",
"action": "modify",
"product": {
"id": "LDD01100",
"productSpecification": {
"id": "TransitELine"
},
"productConfiguration": {
"@type": "EVPL",
"bandwidth": 200
},
"productRelationship": [
{
"type": "hasENNIEndPoint",
"product": {
"id": "ROUTA659-GigabitEth0-0-0-13"
}
},
{
"type": "hasENNIEndPoint",
"product": {
"id": "ROUTA669-GigabitEth0-2-0-11"
}
}
]
},
"productOffering": {
"id": "Intense"
}
}
]
}
Quote Management
The Quote Management API allows the Buyer to request a quote for the installation of one or more of the Seller’s Product Offerings or for an action to be performed on an existing Product.
The uses cases supported are:
- Create a quote request with immediate response;
- Retrieve quote list;
- Retrieve quote by quote identifier.
To consult Quote Management MEF reference MEF_W115.md.
Create Quote Request operation
Resource | Method | Description |
---|---|---|
/quoteManagement/v1/quote | POST | A request initiated by the Buyer to create new Quote and start the quotation process. |
Input and output parameters
Consult the quoteManagement api-reference.
Quote example 1: Create product (two new interfaces -Transit Eline)
curl -X POST 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/quoteManagement/v1/quote'
-H 'Content-Type: application/json;charset=utf-8'
-H 'Authorization: Bearer bnjYd9B7vA4AtcLB3O2GZ4jsjQjy'
--data-raw 'Body'
Body:
{
"externalId": "1",
"projectId": "1",
"quoteLevel": "firm",
"instantSyncQuoting": false,
"description": "EVPL from Paris to New-York",
"requestedCurrency": "EUR",
"quoteItem": [{
"id": "1",
"action": "add",
"requestedQuoteItemTerm": {
"duration": {
"amount": 1,
"units": "year"
}
},
"product": {
"productSpecification": {
"id": "TransitELine"
},
"productConfiguration": {
"@type": "EVPL",
"bandwidth": 2,
"classOfService": "GUARANTEED"
}
},
"productOffering": {
"id": "Intense"
},
"quoteItemRelationship": [{
"type": "hasENNIEndPoint",
"id": "2"
}, {
"type": "hasENNIEndPoint",
"id": "3"
}
]
}, {
"id": "2",
"action": "add",
"productOffering": {
"id": "AccessInterface"
},
"product": {
"productSpecification": {
"id": "ENNI"
},
"productOffering": {
"id": "AccessInterface"
},
"place": [{
"role": "ENNI Site",
"@type": "PlaceRef",
"@referredType": "GeographicSite",
"id": "100000"
}
]
}
}, {
"id": "3",
"action": "add",
"productOffering": {
"id": "AccessInterface"
},
"product": {
"productSpecification": {
"id": "ENNI"
},
"productOffering": {
"id": "AccessInterface"
},
"place": [{
"role": "ENNI Site",
"@type": "PlaceRef",
"@referredType": "GeographicSite",
"id": "100001"
}
]
}
}
],
"relatedParty": [{
"role": "buyer"
}
]
}
Response:
{
"state": "approved",
"instantSyncQuoting": true,
"quoteLevel": "firm",
"quoteItem": [
{
"id": "1",
"state": "approved",
"action": "add",
"productOffering": {
"id": "Intense"
},
"product": {
"productSpecification": {
"id": "TransitELine"
},
"productConfiguration": {
"bandwidth": 2,
"classOfService": "GUARANTEED",
"@type": "EVPL"
}
},
"quoteItemPrice": [
{
"priceType": "recurring",
"name": "recurring charge",
"price": {
"preTaxAmount": {
"value": 86,
"unit": "EUR"
}
},
"recurringChargePeriod": "month"
}
],
"requestedQuoteItemTerm": {
"duration": {
"amount": 1,
"units": "year"
}
},
"quoteItemTerm": {
"duration": {
"amount": 1,
"units": "year"
}
},
"quoteItemRelationship": [
{
"type": "hasENNIEndPoint",
"id": "2"
},
{
"type": "hasENNIEndPoint",
"id": "3"
}
]
},
{
"id": "2",
"state": "approved",
"action": "add",
"productOffering": {
"id": "AccessInterface"
},
"product": {
"productSpecification": {
"id": "ENNI"
},
"place": [
{
"id": "45540",
"role": "ENNI Site",
"@type": "PlaceRef",
"@referredType": "GeographicSite"
}
]
},
"quoteItemPrice": [
{
"priceType": "nonRecurring",
"name": "non-recurring charge",
"price": {
"preTaxAmount": {
"value": 1000.00,
"unit": "EUR"
}
}
}
]
},
{
"id": "3",
"state": "approved",
"action": "add",
"productOffering": {
"id": "AccessInterface"
},
"product": {
"productSpecification": {
"id": "ENNI"
},
"place": [
{
"id": "105740",
"role": "ENNI Site",
"@type": "PlaceRef",
"@referredType": "GeographicSite"
}
]
},
"quoteItemPrice": [
{
"priceType": "nonRecurring",
"name": "non-recurring charge",
"price": {
"preTaxAmount": {
"value": 1000.00,
"unit": "EUR"
}
}
}
]
}
],
"id": 34,
"externalId": "1",
"projectId": "1",
"description": "From New-York to Paris",
"quoteDate": "2021-04-04T02:36:01Z",
"effectiveQuoteCompletionDate": "2021-04-04T02:36:01Z",
"validFor": {
"startDate": "2021-04-04T02:36:01Z",
"endDate": "2021-04-06T23:59:59Z"
},
"relatedParty": [
{
"role": "billing",
"number": "+33 600000001",
"name": "Vincent Acme",
"emailAddress": "billing@mail.com",
"firstName": "Vincent",
"lastName": "Acme",
"companyName": "ACME",
"streetAddress": "Rue de Paris",
"postCode": "75003",
"country": "France",
"city": "Paris",
"title": "DAF"
},
{
"role": "commercial",
"number": "+33123456788",
"name": "Henry Martin",
"emailAddress": "commercial@mailtest.com",
"firstName": "Henry",
"lastName": "Martin",
"companyName": "Test Company",
"streetAddress": "6 avenue de Gaulle",
"postCode": "75001",
"country": "France",
"city": "Paris",
"title": "Commercial"
},
{
"role": "developer",
"number": "+33 600000001",
"name": "Joan Developer",
"emailAddress": "developer@acme.com",
"firstName": "Joan",
"lastName": "Developer",
"companyName": "ACME",
"streetAddress": "Rue de Paris",
"postCode": "75003",
"country": "France",
"city": "Paris",
"title": "Developer"
},
{
"role": "orangeCommercial",
"number": "+33 600000001",
"name": "Jack Orange-Commercial",
"emailAddress": "orange.commercial@acme.com",
"firstName": "Jack",
"lastName": "Orange-Commercial"
},
{
"role": "gdpr",
"number": "+33 600000001",
"name": "Jill Rgpd",
"emailAddress": "rgpd@acme.com",
"firstName": "Jill",
"lastName": "Rgpd"
},
{
"role": "fault",
"number": "0125555555",
"name": "FAULTTEST",
"emailAddress": "sav@testmail.com",
"lastName": "FAULTTEST"
},
{
"role": "signatory",
"name": "Paul Dubois",
"emailAddress": "signatory@mail.com",
"firstName": "Paul",
"lastName": "Dubois"
},
{
"role": "technical",
"number": "0160000000",
"name": "Amandine Bernard",
"emailAddress": "technical@mailtest.com",
"firstName": "Amandine",
"lastName": "Bernard",
"companyName": "Test Company",
"streetAddress": "3 rue Michel",
"postCode": "75000",
"country": "France",
"city": "Paris",
"title": "Ingenior"
},
{
"role": "buyer",
"id": "27117624",
"number": "+33234567890",
"emailAddress": "test@mail.com"
}
],
"requestCurrency": "EUR"
}
Quote example 2: Create product (existing interfaces)
curl -X POST 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/quoteManagement/v1/quote'
-H 'Content-Type: application/json;charset=utf-8'
-H 'Authorization: Bearer bnjYd9B7vA4AtcLB3O2GZ4jsjQjy'
--data-raw 'Body'
Body:
"externalId": "1",
"projectId": "1",
"quoteLevel": "firm",
"instantSyncQuoting": false,
"description": "Test ",
"requestedCurrency": "EUR",
"quoteItem": [{
"id": "1",
"action": "add",
"requestedQuoteItemTerm": {
"duration": {
"amount": 1,
"units": "year"
}
},
"product": {
"productSpecification": {
"id": "TransitELine"
},
"productConfiguration": {
"@type": "EVPL",
"bandwidth": 2,
"classOfService": "GUARANTEED"
},
"productRelationship": [{
"type": "hasENNIEndPoint",
"product": {
"id": "ROUTA659-TenGigEth1-0-6",
"buyerProductId": "ENNI01"
}
}, {
"type": "hasENNIEndPoint",
"product": {
"id": "ROUTA591-TenGigEth1-0-5",
"buyerProductId": "ENNI06"
}
}
]
},
"productOffering": {
"id": "Intense"
}
}
],
"relatedParty": [{
"role": "buyer"
}
]
}
Quote example 3: Update a product
curl -X POST 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/quoteManagement/v1/quote'
-H 'Content-Type: application/json;charset=utf-8'
-H 'Authorization: Bearer bnjYd9B7vA4AtcLB3O2GZ4jsjQjy'
--data-raw 'Body'
Body:
{
"externalId": "1",
"projectId": "1",
"quoteLevel": "firm",
"instantSyncQuoting": false,
"description": "exemple de description",
"expectedFulfillmentStartDate": "2020-09-28T12:52:39.875Z",
"quoteItem": [
{
"id": "1",
"action": "modify",
"productOffering": {
"id": "Intense"
},
"requestedQuoteItemTerm": {
"duration": {
"amount": 1,
"units": "day"
}
},
"product": {
"id": "LDD01200",
"productSpecification": {
"id": "TransitELine"
},
"productRelationship": [
{
"type": "hasENNIEndPoint",
"product": {
"id": "ROUTA669-TenGigEth0-2-0-16",
"buyerProductId": "ENNI01"
}
},
{
"type": "hasENNIEndPoint",
"product": {
"id": "ROUTA659-GigabitEth0-0-0-13",
"buyerProductId": "ENNI06"
}
}
],
"productConfiguration": {
"@type": "EVPL",
"bandwidth": 10,
"classOfService": "GUARANTEED"
}
}
}
],
"relatedParty": [
{
"role": "buyer"
}
]
}
Retrieve Quote List operation
Resource | Method | Description |
---|---|---|
/quoteManagement/v1/quote | GET | The Buyer can retrieve a list of Quotes with the desired filtering criteria. |
Input and output parameters
Consult the quoteManagement api-reference.
Quote example 4: Retrieve a list of Quotes
curl -X GET 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/quoteManagement/v1/quote/'
-H 'Authorization: Bearer 1WHRcYtn8QdKuYe2No67xz7mEGpV'
Response:
[
{
"id": 4,
"state": "approved",
"quoteLevel": "firm",
"quoteDate": "2021-03-30T13:19:42Z",
"effectiveQuoteCompletionDate": "2021-03-30T13:19:42Z"
},
{
"id": 5,
"state": "approved",
"quoteLevel": "firm",
"quoteDate": "2021-03-30T13:39:08Z",
"effectiveQuoteCompletionDate": "2021-03-30T13:39:08Z"
},
{
"id": 6,
"state": "approved",
"quoteLevel": "firm",
"quoteDate": "2021-03-30T14:13:52Z",
"effectiveQuoteCompletionDate": "2021-03-30T14:13:52Z"
},
{
"id": 7,
"state": "approved",
"quoteLevel": "firm",
"quoteDate": "2021-03-30T14:32:22Z",
"effectiveQuoteCompletionDate": "2021-03-30T14:32:22Z"
}
]
Retrieve Quote by Quote Identifier
Resource | Method | Description |
---|---|---|
/quoteManagement/v1/quote/{id} | GET | The Buyer can get detailed information about the Quote. |
Input and output parameters
Consult the quoteManagement api-reference.
Quote exemple 4: Get detailed information about a quote
curl -X GET 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/quoteManagement/v1/quote/6'
-H 'Authorization: Bearer 9GDqSE7zYcVKgQRCckT0Qj4Exxbn'
Response:
{
"state": "approved",
"instantSyncQuoting": true,
"quoteLevel": "firm",
"quoteItem": [
{
"id": "1",
"state": "approved",
"action": "add",
"productOffering": {
"id": "Intense"
},
"product": {
"productRelationship": [
{
"type": "hasENNIEndPoint",
"product": {
"id": "ROUTA591-TenGigEth1-0-5"
}
},
{
"type": "hasENNIEndPoint",
"product": {
"id": "ROUTA659-TenGigEth1-0-6"
}
}
],
"productSpecification": {
"id": "TransitELine"
},
"productConfiguration": {
"bandwidth": 4,
"classOfService": "GUARANTEED",
"@type": "EVPL"
}
},
"quoteItemPrice": [
{
"priceType": "recurring",
"name": "recurring charge",
"price": {
"preTaxAmount": {
"value": 50.00,
"unit": "EUR"
}
},
"recurringChargePeriod": "day"
}
],
"quoteItemTerm": {
"duration": {
"amount": 1,
"units": "day"
}
}
}
],
"id": 6,
"quoteDate": "2021-03-30T14:13:52Z",
"effectiveQuoteCompletionDate": "2021-03-30T14:13:52Z",
"validFor": {
"startDate": "2021-03-30T14:13:52Z",
"endDate": "2021-04-01T23:59:59Z"
},
"relatedParty": [
{
"role": "billing",
"number": "+33 600000001",
"name": "Vincent Acme",
"emailAddress": "billing@mail.com",
"firstName": "Vincent",
"lastName": "Acme",
"companyName": "ACME",
"streetAddress": "Rue de Paris",
"postCode": "75003",
"country": "France",
"city": "Paris",
"title": "DAF"
},
{
"role": "commercial",
"number": "+33123456788",
"name": "Henry Martin",
"emailAddress": "commercial@mailtest.com",
"firstName": "Henry",
"lastName": "Martin",
"companyName": "Test Company",
"streetAddress": "6 avenue de Gaulle",
"postCode": "75001",
"country": "France",
"city": "Paris",
"title": "Commercial"
},
{
"role": "developer",
"number": "+33 600000001",
"name": "Joan Developer",
"emailAddress": "developer@acme.com",
"firstName": "Joan",
"lastName": "Developer",
"companyName": "ACME",
"streetAddress": "Rue de Paris",
"postCode": "75003",
"country": "France",
"city": "Paris",
"title": "Developer"
},
{
"role": "orangeCommercial",
"number": "+33 600000001",
"name": "Jack Orange-Commercial",
"emailAddress": "orange.commercial@acme.com",
"firstName": "Jack",
"lastName": "Orange-Commercial"
},
{
"role": "gdpr",
"number": "+33 600000001",
"name": "Jill Rgpd",
"emailAddress": "rgpd@acme.com",
"firstName": "Jill",
"lastName": "Rgpd"
},
{
"role": "fault",
"number": "0125555555",
"name": "FAULTTEST",
"emailAddress": "sav@testmail.com",
"lastName": "FAULTTEST"
},
{
"role": "signatory",
"name": "Paul Dubois",
"emailAddress": "signatory@mail.com",
"firstName": "Paul",
"lastName": "Dubois"
},
{
"role": "technical",
"number": "0160000000",
"name": "Amandine Bernard",
"emailAddress": "technical@mailtest.com",
"firstName": "Amandine",
"lastName": "Bernard",
"companyName": "Test Company",
"streetAddress": "3 rue Michel",
"postCode": "75000",
"country": "France",
"city": "Paris",
"title": "Ingenior"
},
{
"role": "buyer",
"id": "27117624",
"number": "+33234567890",
"emailAddress": "test@mail.com"
}
],
"requestCurrency": "EUR"
}
Product Order Management
This API provides the complete set of use cases needed to support the ordering of Products.
The uses cases supported are:
- Create Product Order;
- Retrieve list of Products Orders;
- Retrieve Product Order by Product Order ID.
To consult Product Order Management MEF reference.
Create Product Order operation
Resource | Method | Description |
---|---|---|
/productOrderManagement/v1/productOrder | POST | Supports the EVPL Product Ordering process. |
Input and output parameters
Consult the productOrderManagement api-reference.
Retrieve list of Products Orders
Resource | Method | Description |
---|---|---|
/productOrderManagement/v1/productOrder | GET | A request initiated by the Buyer to retrieve a list of Orders that match the provided criteria |
Product Order example 1: Create a product (two news interfaces)
curl -X POST 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/productOrderManagement/v1/productOrder'
-H 'Content-Type: application/json;charset=utf-8'
-H 'Authorization: Bearer 3tb02WxJlsqDfo7LS4jkxwNGWrwA'
--data-raw '{Body}'
Body:
{
"externalId": "1",
"buyerRequestDate": "2021-04-04T12:00:00Z",
"requestedCompletionDate": "2021-04-05T12:00:00Z",
"relatedBuyerPON": "BOA12",
"projectId": "1",
"orderActivity": "install",
"desiredResponse": "confirmationAndEngineeringDesign",
"orderVersion": "1",
"billingAccount": {
"id": "12345",
"name": "contact",
"billingContact": {
"contactFirstName": "Vincent",
"contactLastName": "Acme",
"title": "DAF",
"companyName": "Test Company",
"streetAddress": "6 avenue de Gaulle",
"postCode": "75001",
"city": "Paris",
"country": "France",
"emailAddress": "billing@mail.com",
"vatNumber": "1233476555",
"invoicesRecipientEmail": "test@mail.com"
}
},
"relatedParty": [
{
"role": "buyer",
"name": "",
"emailAddress": "test@mail.com",
"number": "+33234567890",
"firstName": "Jean",
"lastName": "Dupont",
"companyName": "Test Company"
},
{
"role": "signatory",
"emailAddress": "signatory@mail.com",
"firstName": "Paul",
"lastName": "Dubois"
},
{
"role": "commercial",
"companyName": "Test Company",
"emailAddress": "commercial@mailtest.com",
"firstName": "Henry",
"lastName": "Martin",
"streetAddress": "6 avenue de Gaulle",
"postCode": "75001",
"city": "Paris",
"country": "France",
"number": "+33123456788",
"title": "Commercial"
},
{
"role": "technical",
"companyName": "Test Company",
"emailAddress": "technical@mailtest.com",
"firstName": "Amandine",
"lastName": "Bernard",
"streetAddress": "3 rue Michel",
"postCode": "75000",
"city": "Paris",
"country": "France",
"number": "0160000000",
"title": "Ingenior"
},
{
"role": "fault",
"emailAddress": "sav@testmail.com",
"lastName": "FAULTTEST",
"number": "0125555555"
}
],
"productOrderItem": [
{
"id": "1",
"action": "add",
"productOffering": {
"id": "Intense"
},
"product": {
"productSpecification": {
"id": "TransitELine"
},
"productConfiguration": {
"bandwidth": 4,
"classOfService": "GUARANTEED",
"@type": "EVPL"
}
},
"orderItemRelationship": [
{
"type": "hasENNIEndPoint",
"id": "2"
},
{
"type": "hasENNIEndPoint",
"id": "3"
}
],
"requestedOrderItemTerm": {
"duration": {
"amount": 1,
"units": "day"
}
}
},
{
"id": "2",
"action": "add",
"productOffering": {
"id": "AccessInterface"
},
"product": {
"productSpecification": {
"id": "ENNI"
},
"productOffering": {
"id": "AccessInterface"
},
"place": [
{
"id": "1440397",
"role": "ENNI Site",
"@type": "PlaceRef",
"@referredType": "GeographicSite"
}
]
}
},
{
"id": "3",
"action": "add",
"productOffering": {
"id": "AccessInterface"
},
"product": {
"productSpecification": {
"id": "ENNI"
},
"productOffering": {
"id": "AccessInterface"
},
"place": [
{
"id": "730124",
"role": "ENNI Site",
"@type": "PlaceRef",
"@referredType": "GeographicSite"
}
]
}
}
]
}
Response:
{
"id": 37,
"externalId": "1",
"orderDate": "2021-04-04T16:23:12Z",
"state": "pending",
"requestedCompletionDate": "2021-04-05T12:00:00Z",
"orderActivity": "install",
"desiredResponse": "confirmationAndEngineeringDesign",
"orderVersion": "1",
"relatedParty": [
{
"role": "commercial",
"number": "+33123456788",
"name": "Henry Martin",
"emailAddress": "commercial@mailtest.com",
"firstName": "Henry",
"lastName": "Martin",
"companyName": "Test Company",
"streetAddress": "6 avenue de Gaulle",
"postCode": "75001",
"country": "France",
"city": "Paris",
"title": "Commercial"
},
{
"role": "developer",
"number": "+33 600000001",
"name": "Joan Developer",
"emailAddress": "developer@acme.com",
"firstName": "Joan",
"lastName": "Developer",
"companyName": "ACME",
"streetAddress": "Rue de Paris",
"postCode": "75003",
"country": "France",
"city": "Paris",
"title": "Developer"
},
{
"role": "orangeCommercial",
"number": "+33 600000001",
"name": "Jack Orange-Commercial",
"emailAddress": "orange.commercial@acme.com",
"firstName": "Jack",
"lastName": "Orange-Commercial"
},
{
"role": "gdpr",
"number": "+33 600000001",
"name": "Jill Rgpd",
"emailAddress": "rgpd@acme.com",
"firstName": "Jill",
"lastName": "Rgpd"
},
{
"role": "fault",
"number": "0125555555",
"name": "FAULTTEST",
"emailAddress": "sav@testmail.com",
"lastName": "FAULTTEST"
},
{
"role": "signatory",
"name": "Paul Dubois",
"emailAddress": "signatory@mail.com",
"firstName": "Paul",
"lastName": "Dubois"
},
{
"role": "technical",
"number": "0160000000",
"name": "Amandine Bernard",
"emailAddress": "technical@mailtest.com",
"firstName": "Amandine",
"lastName": "Bernard",
"companyName": "Test Company",
"streetAddress": "3 rue Michel",
"postCode": "75000",
"country": "France",
"city": "Paris",
"title": "Ingenior"
},
{
"role": "buyer",
"id": "27117624",
"number": "+33234567890",
"emailAddress": "test@mail.com"
}
],
"productOrderItem": [
{
"id": "1",
"action": "add",
"state": "pending",
"product": {
"id": "LDD30117",
"productSpecification": {
"id": "TransitELine"
},
"productConfiguration": {
"bandwidth": 4,
"classOfService": "GUARANTEED",
"@type": "EVPL"
}
},
"orderItemPrice": [
{
"priceType": "recurring",
"name": "recurring charge",
"price": {
"preTaxAmount": {
"value": 28,
"unit": "EUR"
}
},
"recurringChargePeriod": "day"
}
],
"orderItemRelationship": [
{
"type": "hasENNIEndPoint",
"id": "2"
},
{
"type": "hasENNIEndPoint",
"id": "3"
}
],
"requestedOrderItemTerm": {
"duration": {
"amount": 1,
"units": "day"
}
}
},
{
"id": "2",
"action": "add",
"state": "pending",
"product": {
"id": "LDD30117",
"productSpecification": {
"id": "ENNI"
},
"place": [
{
"id": "1440397",
"role": "ENNI Site",
"@type": "PlaceRef",
"@referredType": "GeographicSite"
}
]
},
"orderItemPrice": [
{
"priceType": "nonRecurring",
"name": "non-recurring charge",
"price": {
"preTaxAmount": {
"value": 3000.00,
"unit": "EUR"
}
}
}
]
},
{
"id": "3",
"action": "add",
"state": "pending",
"product": {
"id": "LDD30117",
"productSpecification": {
"id": "ENNI"
},
"place": [
{
"id": "730124",
"role": "ENNI Site",
"@type": "PlaceRef",
"@referredType": "GeographicSite"
}
]
},
"orderItemPrice": [
{
"priceType": "nonRecurring",
"name": "non-recurring charge",
"price": {
"preTaxAmount": {
"value": 1000.00,
"unit": "EUR"
}
}
}
]
}
],
"buyerRequestDate": "2021-04-04T12:00:00Z",
"expectedCompletionDate": "2021-04-09T16:23:11Z",
"projectId": "1",
"relatedBuyerPON": "BOA12",
"billingAccount": {
"billingContact": {
"contactName": "Vincent Acme",
"phoneNumber": "+33 600000001",
"emailAddress": "billing@mail.com",
"streetAddress": "Rue de Paris",
"contactLastName": "Acme",
"contactFirstName": "Vincent",
"title": "DAF",
"companyName": "ACME",
"postCode": "75003",
"city": "Paris",
"country": "France",
"vatNumber": "FR000001",
"invoicesRecipientEmail": "invoices@acme.com"
}
},
"requestCurrency": "EUR"
}
Product Order example 2: Create a product (an existing interface and a new interface)
curl -X POST 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/productOrderManagement/v1/productOrder'
-H 'Content-Type: application/json;charset=utf-8'
-H 'Authorization: Bearer 3tb02WxJlsqDfo7LS4jkxwNGWrwA'
--data-raw '{Body}'
Body:
{
"externalId": "1",
"buyerRequestDate": "2021-04-04T12:00:00Z",
"requestedCompletionDate": "2021-04-05T12:00:00Z",
"relatedBuyerPON": "BOA12",
"projectId": "1",
"orderActivity": "install",
"desiredResponse": "confirmationAndEngineeringDesign",
"orderVersion": "1",
"billingAccount": {
"id": "12345",
"name": "contact",
"billingContact": {
"contactFirstName": "Vincent",
"contactLastName": "Acme",
"title": "DAF",
"companyName": "Test Company",
"streetAddress": "6 avenue de Gaulle",
"postCode": "75001",
"city": "Paris",
"country": "France",
"emailAddress": "billing@mail.com",
"vatNumber": "1233476555",
"invoicesRecipientEmail": "test@mail.com"
}
},
"relatedParty": [
{
"role": "buyer",
"name": "",
"emailAddress": "test@mail.com",
"number": "+33234567890",
"firstName": "Jean",
"lastName": "Dupont",
"companyName": "Test Company"
},
{
"role": "signatory",
"emailAddress": "signatory@mail.com",
"firstName": "Paul",
"lastName": "Dubois"
},
{
"role": "commercial",
"companyName": "Test Company",
"emailAddress": "commercial@mailtest.com",
"firstName": "Henry",
"lastName": "Martin",
"streetAddress": "6 avenue de Gaulle",
"postCode": "75001",
"city": "Paris",
"country": "France",
"number": "+33123456788",
"title": "Commercial"
},
{
"role": "technical",
"companyName": "Test Company",
"emailAddress": "technical@mailtest.com",
"firstName": "Amandine",
"lastName": "Bernard",
"streetAddress": "3 rue Michel",
"postCode": "75000",
"city": "Paris",
"country": "France",
"number": "0160000000",
"title": "Ingenior"
},
{
"role": "fault",
"emailAddress": "sav@testmail.com",
"lastName": "FAULTTEST",
"number": "0125555555"
}
],
"productOrderItem": [
{
"id": "1",
"action": "add",
"requestedOrderItemTerm": {
"duration": {
"amount": 10,
"units": "day"
}
},
"product": {
"productSpecification": {
"id": "TransitELine"
},
"productRelationship": [
{
"type": "hasENNIEndPoint",
"product": {
"id": "ROUTA659-TenGigEth1-0-6",
"buyerProductId": "ENNI01"
}
}
],
"productConfiguration": {
"@type": "EVPL",
"bandwidth": 4,
"classOfService": "STANDARD"
}
},
"productOffering": {
"id": "Intense"
},
"orderItemRelationship": [
{
"type": "hasENNIEndPoint",
"id": "2"
}
]
},
{
"id": "2",
"action": "add",
"productOffering": {
"id": "AccessInterface"
},
"product": {
"productSpecification": {
"id": "ENNI"
},
"productOffering": {
"id": "AccessInterface"
},
"place": [
{
"role": "ENNI Site",
"@type": "PlaceRef",
"@referredType": "GeographicSite",
"id": "737544"
}
]
}
}
]
}
Create a product Order example 3: Update a product (bandwidth or/and class of service)
curl -X POST 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/productOrderManagement/v1/productOrder'
-H 'Content-Type: application/json;charset=utf-8'
-H 'Authorization: Bearer 3tb02WxJlsqDfo7LS4jkxwNGWrwA'
--data-raw '{Body}'
Body:
{
"externalId": "1",
"buyerRequestDate": "2021-04-04T12:00:00Z",
"requestedCompletionDate": "2021-04-05T12:00:00Z",
"relatedBuyerPON": "BOA12",
"projectId": "1",
"orderActivity": "install",
"desiredResponse": "confirmationAndEngineeringDesign",
"orderVersion": "1",
"billingAccount": {
"id": "12345",
"name": "contact",
"billingContact": {
"contactFirstName": "Vincent",
"contactLastName": "Acme",
"title": "DAF",
"companyName": "Test Company",
"streetAddress": "6 avenue de Gaulle",
"postCode": "75001",
"city": "Paris",
"country": "France",
"emailAddress": "billing@mail.com",
"vatNumber": "1233476555",
"invoicesRecipientEmail": "test@mail.com"
}
},
"relatedParty": [
{
"role": "buyer",
"name": "",
"emailAddress": "test@mail.com",
"number": "+33234567890",
"firstName": "Jean",
"lastName": "Dupont",
"companyName": "Test Company"
},
{
"role": "signatory",
"emailAddress": "signatory@mail.com",
"firstName": "Paul",
"lastName": "Dubois"
},
{
"role": "commercial",
"companyName": "Test Company",
"emailAddress": "commercial@mailtest.com",
"firstName": "Henry",
"lastName": "Martin",
"streetAddress": "6 avenue de Gaulle",
"postCode": "75001",
"city": "Paris",
"country": "France",
"number": "+33123456788",
"title": "Commercial"
},
{
"role": "technical",
"companyName": "Test Company",
"emailAddress": "technical@mailtest.com",
"firstName": "Amandine",
"lastName": "Bernard",
"streetAddress": "3 rue Michel",
"postCode": "75000",
"city": "Paris",
"country": "France",
"number": "0160000000",
"title": "Ingenior"
},
{
"role": "fault",
"emailAddress": "sav@testmail.com",
"lastName": "FAULTTEST",
"number": "0125555555"
}
],
"productOrderItem": [
{
"id": "1",
"action": "modify",
"productOffering": {
"id": "Intense"
},
"requestedOrderItemTerm": {
"duration": {
"amount": 1,
"units": "year"
}
},
"product": {
"id": "LDD01100",
"productSpecification": {
"id": "TransitELine"
},
"productConfiguration": {
"@type": "EVPL",
"bandwidth": 220,
"classOfService": "GUARANTEED"
}
}
}
]
}
Product Order example 4: To create a Product with a Quote Identifier
Use the previous Product Order examples (1, 2 and 3) and include the Quote ID in productOrderItem section.
productOrderItem Section:
{
....
"productConfiguration": {
"@type": "EVPL",
"bandwidth": 220,
"classOfService": "GUARANTEED"
}
},
"quote": {
"id": "10"
}
}
Retrieve list of Products Orders operation
Resource | Method | Description |
---|---|---|
/productOrderManagement/v1/productOrder | GET | A request initiated by the Buyer to retrieve the Products Orders list. |
Product Order example 5: Retrieve a Product Order details
curl -X POST 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/productOrderManagement/v1/productOrder'
-H 'Content-Type: application/json;charset=utf-8'
-H 'Authorization: Bearer 3tb02WxJlsqDfo7LS4jkxwNGWrwA'
Response:
[
{
"id": 9,
"orderDate": "2021-03-30T14:46:53Z",
"state": "inProgress",
"externalId": "1"
},
{
"id": 11,
"orderDate": "2021-03-30T16:10:08Z",
"state": "pending",
"externalId": "1"
},
{
"id": 13,
"orderDate": "2021-03-31T08:46:03Z",
"state": "pending",
"externalId": "1"
},
{
"id": 14,
"orderDate": "2021-03-31T09:10:50Z",
"state": "pending",
"externalId": "1"
}
]
Retrieve Product Order by Product Order ID operation
Resource | Method | Description |
---|---|---|
/productOrderManagement/v1/productOrder | GET | A request initiated by the Buyer to retrieve the details associated with a specific Product Order with the given Order Identifier. |
Product Order example 6: Retrieve a Product Order details
curl -X GET 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/productOrderManagement/v1/productOrder/11'
-H 'Authorization: Bearer AspvTX2t34Dag88F8829KyttdGdN'
Response:
{
"id": 11,
"externalId": "1",
"orderDate": "2021-03-30T16:10:08Z",
"state": "pending",
"requestedCompletionDate": "2021-03-31T12:00:00Z",
"orderActivity": "install",
"desiredResponse": "confirmationAndEngineeringDesign",
"orderVersion": "1",
"relatedParty": [
{
"role": "commercial",
"number": "+33123456788",
"name": "Henry Martin",
"emailAddress": "commercial@mailtest.com",
"firstName": "Henry",
"lastName": "Martin",
"companyName": "Test Company",
"streetAddress": "6 avenue de Gaulle",
"postCode": "75001",
"country": "France",
"city": "Paris",
"title": "Commercial"
},
{
"role": "developer",
"number": "+33 600000001",
"name": "Joan Developer",
"emailAddress": "developer@acme.com",
"firstName": "Joan",
"lastName": "Developer",
"companyName": "ACME",
"streetAddress": "Rue de Paris",
"postCode": "75003",
"country": "France",
"city": "Paris",
"title": "Developer"
},
{
"role": "orangeCommercial",
"number": "+33 600000001",
"name": "Jack Orange-Commercial",
"emailAddress": "orange.commercial@acme.com",
"firstName": "Jack",
"lastName": "Orange-Commercial"
},
{
"role": "gdpr",
"number": "+33 600000001",
"name": "Jill Rgpd",
"emailAddress": "rgpd@acme.com",
"firstName": "Jill",
"lastName": "Rgpd"
},
{
"role": "fault",
"number": "0125555555",
"name": "FAULTTEST",
"emailAddress": "sav@testmail.com",
"lastName": "FAULTTEST"
},
{
"role": "signatory",
"name": "Paul Dubois",
"emailAddress": "signatory@mail.com",
"firstName": "Paul",
"lastName": "Dubois"
},
{
"role": "technical",
"number": "0160000000",
"name": "Amandine Bernard",
"emailAddress": "technical@mailtest.com",
"firstName": "Amandine",
"lastName": "Bernard",
"companyName": "Test Company",
"streetAddress": "3 rue Michel",
"postCode": "75000",
"country": "France",
"city": "Paris",
"title": "Ingenior"
},
{
"role": "buyer",
"id": "27117624",
"number": "+33234567890",
"emailAddress": "test@mail.com"
}
],
"productOrderItem": [
{
"id": "1",
"action": "add",
"state": "pending",
"product": {
"id": "LDD30106",
"productSpecification": {
"id": "TransitELine"
},
"productConfiguration": {
"bandwidth": 4,
"classOfService": "GUARANTEED",
"@type": "EVPL"
}
},
"orderItemPrice": [
{
"priceType": "recurring",
"name": "recurring charge",
"price": {
"preTaxAmount": {
"value": 28.000,
"unit": "EUR"
}
},
"recurringChargePeriod": "day"
}
],
"orderItemRelationship": [
{
"type": "hasENNIEndPoint",
"id": "2"
},
{
"type": "hasENNIEndPoint",
"id": "3"
}
],
"requestedOrderItemTerm": {
"duration": {
"amount": 1,
"units": "day"
}
}
},
{
"id": "2",
"action": "add",
"state": "pending",
"product": {
"productSpecification": {
"id": "ENNI"
},
"place": [
{
"id": "1440397",
"role": "ENNI Site",
"@type": "PlaceRef",
"@referredType": "GeographicSite"
}
]
},
"orderItemPrice": [
{
"priceType": "nonRecurring",
"name": "non-recurring charge",
"price": {
"preTaxAmount": {
"value": 3000.00,
"unit": "EUR"
}
}
}
]
},
{
"id": "3",
"action": "add",
"state": "pending",
"product": {
"productSpecification": {
"id": "ENNI"
},
"place": [
{
"id": "730124",
"role": "ENNI Site",
"@type": "PlaceRef",
"@referredType": "GeographicSite"
}
]
},
"orderItemPrice": [
{
"priceType": "nonRecurring",
"name": "non-recurring charge",
"price": {
"preTaxAmount": {
"value": 1000.00,
"unit": "EUR"
}
}
}
]
}
],
"buyerRequestDate": "2021-03-31T12:00:00Z",
"expectedCompletionDate": "2021-04-06T16:10:08Z",
"projectId": "1",
"relatedBuyerPON": "BOA12",
"billingAccount": {
"billingContact": {
"contactName": "Vincent Acme",
"phoneNumber": "+33 600000001",
"emailAddress": "billing@mail.com",
"streetAddress": "Rue de Paris",
"contactLastName": "Acme",
"contactFirstName": "Vincent",
"title": "DAF",
"companyName": "ACME",
"postCode": "75003",
"city": "Paris",
"country": "France",
"vatNumber": "FR000001",
"invoicesRecipientEmail": "invoices@acme.com"
}
},
"requestCurrency": "EUR"
}
Product Inventory Management
The scope of this MEF API is to provide the ability for a Service Provider’s (Buyer) operational support system to retrieve from a Partner’s (Seller) Inventory management system a set of product instances based upon a filter of product inventory attributes, or a specific product instance based upon a product identifier. Product Inventory API has been designed by MEF Sonata team and used TMF 637 as template.
The uses cases supported are:
- Retrieve Product list;
- Retrieve Product by Identifier.
To consult the Product Inventory Management MEF reference.
Retrieve Product list operation
Resource | Method | Description |
---|---|---|
/productInventoryManagement/v1/product | GET | The Buyer requests a list of Products from the Seller based on filter criteria. |
Input and output parameters
Consult the productInventoryManagement api-reference.
Product Order Inventory example 1: Retrieve a list of Products
curl -X GET 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/productInventoryManagement/v1/product'
-H 'Authorization: Bearer AspvTX2t34Dag88F8829KyttdGdN'
Response:
[
{
"id": "LDD30105",
"status": "pending",
"productOffering": {
"id": "Intense"
},
"productSpecification": {
"id": "TransitELine"
}
},
"productSpecification": {
"id": "TransitELine"
}
},
{
"id": "LDD30112",
"status": "active",
"productOffering": {
"id": "Intense"
},
"productSpecification": {
"id": "TransitELine"
}
},
{
"id": "LDD30113",
"status": "pending",
"productOffering": {
"id": "Intense"
},
"productSpecification": {
"id": "TransitELine"
}
},
{
"id": "LDD30114",
"status": "active",
"productOffering": {
"id": "Intense"
},
"productSpecification": {
"id": "TransitELine"
}
},
]
Retrieve Product by Identifier operation
Resource | Method | Description |
---|---|---|
/productInventoryManagement/v1/product/{id} | GET | The buyer requests the details associated with a single Product based on a Product Identifier. |
Input and output parameters
Consult the productInventoryManagement api-reference.
Product Order Inventory example 2: Retrieve a Product details
curl -X GET 'https://ope-obs.apibackbone.orange.com/internationalcarriers/mefApi/sonata/productInventoryManagement/v1/product/LDD30114'
-H 'Authorization: Bearer e7mErInqC7fB5T9k86phOJkR9AxS'
Response:
{
"id": "LDD30114",
"productOrderId": 31,
"status": "pending",
"lastUpdateDate": "2021-04-02T14:13:57Z",
"productConfiguration": {
"bandwidth": 4,
"classOfService": "GUARANTEED",
"@type": "EVPL"
},
"productOffering": {
"id": "Intense"
},
"productSpecification": {
"id": "TransitELine"
},
"productRelationship": [
{
"type": "hasENNIEndPoint",
"product": {
"id": "ROUTA591-TenGigEth1-0-5"
}
},
{
"type": "hasENNIEndPoint",
"product": {
"id": "ROUTA659-TenGigEth1-0-6"
}
}
],
"relatedParty": [
{
"role": "billing",
"number": "+33 600000001",
"name": "Vincent Acme",
"emailAddress": "billing@mail.com",
"firstName": "Vincent",
"lastName": "Acme",
"companyName": "ACME",
"streetAddress": "Rue de Paris",
"postCode": "75003",
"country": "France",
"city": "Paris",
"title": "DAF"
},
{
"role": "commercial",
"number": "+33123456788",
"name": "Henry Martin",
"emailAddress": "commercial@mailtest.com",
"firstName": "Henry",
"lastName": "Martin",
"companyName": "Test Company",
"streetAddress": "6 avenue de Gaulle",
"postCode": "75001",
"country": "France",
"city": "Paris",
"title": "Commercial"
},
{
"role": "developer",
"number": "+33 600000001",
"name": "Joan Developer",
"emailAddress": "developer@acme.com",
"firstName": "Joan",
"lastName": "Developer",
"companyName": "ACME",
"streetAddress": "Rue de Paris",
"postCode": "75003",
"country": "France",
"city": "Paris",
"title": "Developer"
},
{
"role": "orangeCommercial",
"number": "+33 600000001",
"name": "Jack Orange-Commercial",
"emailAddress": "orange.commercial@acme.com",
"firstName": "Jack",
"lastName": "Orange-Commercial"
},
{
"role": "gdpr",
"number": "+33 600000001",
"name": "Jill Rgpd",
"emailAddress": "rgpd@acme.com",
"firstName": "Jill",
"lastName": "Rgpd"
},
{
"role": "fault",
"number": "0125555555",
"name": "FAULTTEST",
"emailAddress": "sav@testmail.com",
"lastName": "FAULTTEST"
},
{
"role": "signatory",
"name": "Paul Dubois",
"emailAddress": "signatory@mail.com",
"firstName": "Paul",
"lastName": "Dubois"
},
{
"role": "technical",
"number": "0160000000",
"name": "Amandine Bernard",
"emailAddress": "technical@mailtest.com",
"firstName": "Amandine",
"lastName": "Bernard",
"companyName": "Test Company",
"streetAddress": "3 rue Michel",
"postCode": "75000",
"country": "France",
"city": "Paris",
"title": "Ingenior"
},
{
"role": "buyer",
"id": "27117624",
"number": "+33234567890",
"emailAddress": "test@mail.com"
}
],
"productPrice": [
{
"price": {
"preTaxAmount": {
"value": 50.00,
"unit": "EUR"
}
},
"priceType": "recurring",
"recurringChargePeriod": "day"
},
{
"price": {
"preTaxAmount": {
"value": 0.00,
"unit": "EUR"
}
},
"priceType": "nonRecurring"
}
],
"productTerm": [
{
"name": "FULL_FLEXIBLE",
"duration": {
"amount": 1,
"units": "day"
},
"validFor": {}
}
],
"statusChange": [
{
"changeReason": "FULL_AUTO_NEW_SERVICE",
"status": "pending"
}
],
"@type": "MEFProduct"
}
Pagination
After each request, explore the http headers
to retrieve the number of results:
X-Result-Count: Number of items in the JSON response
X-Total-Count: Total number of reply available
If X-Total-Count
is bigger than X-Result-Count
, you need to request again by incrementing the offset with the X-Result-Count
value.
Errors
Important
Failure to code a proper management of the error responses in your application may affect its resilience. Access to the API may be revoked if your application generates too many mishandled errors.
Your application must parse the returned HTTP response to check if an error is returned instead of a 200 OK. Orange APIs use appropriate HTTP status codes to indicate any request processing error, providing detailed information about the underlying fault. This helps you provide better feedback to your users and implement failure recovery mechanisms in your application.
For details on the main error codes, response format, tips and troubleshooting, see our Handling API errors guide.
Authentication Errors
Errors 401
If you get a status code 401
with the error code 42
(such as below), then request a new access token
.
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{
"code": 42,
"message": "Expired credentials",
"description": "The requested service needs credentials, and the ones provided
were out-of-date."
}
Important
- Each
access_token
has a lifetime validity period. This validity period may change overtime to comply with security rules.- The token server has a maximum hourly quota per client application to prevent from misuse.
Therefore,- DON'T request an
access_token
each time you invoke the service API.- DON'T hard-code a validity duration in your application.
Instead, your application must parse the returned status code and error code to check if it needs to request a newaccess token
.
For other 401
errors: check that you provide the right Autorization
header with the right Bearer
.
Errors 400
In case of invalid request to the API, you will receive a 400
error code with detailed information in the body message, such as:
HTTP/1.1 400 Bad Request
{
"code": 25,
"description": "Missing header",
"message": "...."
}
Consult the other errors. EVPL
Support
If you experience a problem with the API integration, you need only to click on Contact us form.
Using Postman on your PC or Mac
We prepared a Postman collection for you, with code to parse replies and play with variables and examples.
You just need to:
- Download the Json file by clicking on this "Run in Postman" icon;
Open the Postman application;
Click on the "file" tab, then "Import" and upload the EVPL Postman collection Json file;
Click on "EVPL API Collection" folder and select "Variables" tab;
Copy your
Authorization
header from the EVPL dashboard on this portal and paste it to the Postman "basic_header" variable;
- Click on "Authorization" tab, position the cursor over the "access_token" variable. The scope must be "Collection".