.wpb_animate_when_almost_visible { opacity: 1; }
EVPL On Line
Provide ethernet links on demand
1.0

Table of contents

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:

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

ResourceMethodDescription
/geographicAddressManagement/sbx/v1/geographicAddressValidationPOSTThis 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

ResourceMethodDescription
/geographicAddressManagement/sbx/v1/geographicAddress/{id}GETThis 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

ResourceMethodDescription
/geographicSiteManagement/sbx/v1/geographicSiteGETThe 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

ResourceMethodDescription
/geographicSiteManagement/v1/geographicSite/{id}GETA 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

ResourceMethodDescription
/productOfferingQualificationManagement/v1/productOfferingQualificationPOSTAllows 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

ResourceMethodDescription
/quoteManagement/v1/quotePOSTA 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

ResourceMethodDescription
/quoteManagement/v1/quoteGETThe 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

ResourceMethodDescription
/quoteManagement/v1/quote/{id}GETThe 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

ResourceMethodDescription
/productOrderManagement/v1/productOrderPOSTSupports the EVPL Product Ordering process.
Input and output parameters

Consult the productOrderManagement api-reference.

Retrieve list of Products Orders

ResourceMethodDescription
/productOrderManagement/v1/productOrderGETA 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

ResourceMethodDescription
/productOrderManagement/v1/productOrderGETA 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

ResourceMethodDescription
/productOrderManagement/v1/productOrderGETA 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

ResourceMethodDescription
/productInventoryManagement/v1/productGETThe 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

ResourceMethodDescription
/productInventoryManagement/v1/product/{id}GETThe 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 new access 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 or to send an email to Claude Seguin.

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;

EVPL Postman collection

  • 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;

Postman Collection variable

  • Click on "Authorization" tab, position the cursor over the "access_token" variable. The scope must be "Collection".

Authorization