API
Application Programming Interface
Nous mettons à votre disposition la même API que celle utilisée par l’Espace Client, vous pourrez donc réaliser toutes les actions de celui-ci et plus encore.
Nos interfaces sont documentées avec la spécification OpenAPI (anciennement Swagger), une documentation générée vous permet de découvrir toutes les méthodes mises à votre disposition.
La spécification/définition de l’API au format yaml est téléchargeable, à l’aide de OpenApi-Generator qui vous permettent de générer très rapidement un “client” dans le langage de votre choix à partir de cette spécification.
Nous publions un client en PHP sur GitHub. Si vous souhaitez ajoutez un language n’hésitez pas a nous solliciter.
Nouveautés
mai 2025
décembre 2024
- Ajout de l’estimation de la distance à construire dans les réponses de tests d’éligibilités voir
response[].distance
novembre 2024
octobre 2024
août 2024
- Ajout des combinaisons d’offres dans les réponses d’éligibilités, l’attribut ‘combinationId’ est unique à chaque offre et prochainement il sera possible de passer commande avec : voir response[].combinations
juillet 2024
- Ajout de la liste des rôles liés a une entité légale voir la clé
roles
- Ajout de la date de première activation d’un
service_contract
mai 2024
avril 2024
- Les contacts sont ajoutés dans les réponses des devis, contrat de services et clients sur la clé
contacts une autre clé configuredContacts vous permet de les lister avec leur rôle
- Nouvelle route pour ajouter des commentaire sur les contrat de services :
/service_contracts/{id}/comments
mars 2024
1 - Authentification
Obtenir un jeton d’accès
Fonctionnement
Pour interroger l’API vous avez besoin d’un jeton d’accès, vous pouvez utiliser un jeton que vous pourrez générer depuis l’Espace Client.
Les tokens créés sur l’interface de production ne sont pas utilisables sur la plateforme de développement. Pour vos développement vous pouvez créer vos tokens sur l’espace client de tests.
Pour vos requêtes il faut ajouter un header Authorization et le jeton précédé de :
Token si c’est un jeton généré dans l’application
L’API legacy permet d’obtenir des access token, dans ce cas prefix est différent :
Bearer dans le cas d’un accessToken
Exemple en PHP
Ajoutez le client de l’API à votre projet
composer require infracorp/api-client-extranet
Pour obtenir une instance du client :
<?php
use Infracorp\Extranet\Client as PrizzTelecom;
require_once(__DIR__ . "/vendor/autoload.php");
$config = PrizzTelecom\Configuration::getDefaultConfiguration()
->setApiKey('Authorization', 'remplacez par votre token')
->setApiKeyPrefix("Authorization", "Token");
$prizzTelecom = new PrizzTelecom\Api\DefaultApi(
new GuzzleHttp\Client(),
$config
);
Par défaut le client se connecte à une plateforme de tests, pour passer en production il faudra changer l’hôte de l’objet $config avant le new.
$config->setHost($config->getHostFromSettings(2));
Exemple avec curl
Voici un exemple d’appel cURL par token pour récupérer la liste des entités légales sur lesquelles vous disposez d’un contrat client en cours de validité :
export url_api="https://dev.prizz-telecom.fr/"
export token="abcdefghijklmnopqrstuvwxyz"
curl --location "${url_api}/external-api/v2/legal_entities" --header "Authorization: Token ${token}"
Dans les exemples suivant on assumera que les variables $url_api et $token sont bien définies.
2 - Catalogue 2025
Indications pour le passage aux nouvelles offres 2025
Présentation du nouveau catalogue
Ce nouveau catalogue, en plus de proposer de nouveaux tarifs, tient compte des retours d’expérience de l’année passée. On espère qu’il permettra de fluidifier l’intégration de nos offres.
Voici une liste des changements à prendre en compte et comment opérer la bascule vers la nouvelle offre.
Mise en place des nouvelles offres
Afin d’éviter une rupture brutale de la commercialisation de nos offres nous n’activons pas les nouveaux catalogues automatiquement.
Vous pouvez contacter votre responsable de compte pour qu’il les active. Nous pouvons aussi les activer en avance sur la sandbox.
L’activation des nouveaux contrats va désactiver les anciens, il est possible de les ré-activer pour que vous puissiez gérer la transition, les deux peuvent fonctionner en même temps. Par défaut les anciens contrats sont désactivés pour gérer la transition.
Si vous utilisez l’API pour passer des commandes ou que vous exploitez certains id de prix il est préférable d’anticiper ce changement avec la sandbox.
Les clés des items et des combinaisons sont différentes, pour ne pas être confondues avec les anciens prix, et bien marquer la différence entre dense et standard, afin de vous faciliter leur identification.
Disparition local / national
Dans notre offre L2 Premium, la position géographique de la porte de collecte par rapport à la position du site client avait une incidence sur le prix. Cette distinction n’existe plus. Des zones denses et standard remplacent cette notion.
Nous ne présentons plus que la collecte nationale (la locale est désactivée), sont prix est de zéro et elle n’a pas d’impact sur les autres prix.
Secteur dense et standard
Ces secteurs géographiques sont utilisés pour moduler la commercialisation, le secteur dense est moins onéreux que le secteur standard. Les FAS ne sont pas sensibles au secteur, uniquement le récurrent.
Pour mettre en oeuvre cette différence nous avons dupliqué les catalogues.
Par exemple, là où vous aviez un contrat L2 Premium, vous aurez deux contrats :
- un contrat L2 Premium Standard 2025
- un contrat L2 Premium Dense 2025
Les contrats sont liés à des listes de prix, et c’est grâce à elle vous serez en mesure de savoir si vous êtes en zone dense ou standard.
Exemple avec le L3 Internet “Standard”
reponses[].pricelistId = 63
| Offre |
Secteur |
ID Prizz Télécom |
ID Prizz Infrastructure |
| L2 PREMIUM |
DENSE |
60 |
77 |
| L2 PREMIUM |
STANDARD |
59 |
76 |
| L2 BASIQUE |
DENSE |
66 |
81 |
| L2 BASIQUE |
STANDARD |
65 |
80 |
| L3 INTERNET |
DENSE |
64 |
79 |
| L3 INTERNET |
STANDARD |
63 |
78 |
Les identifiants des items sont propres à chaque catalogue. Ces identifiants nous permettent de construire les combinaisons. Les identifiant d’items de la zone dense ne sont donc pas les mêmes que ceux de la zone standard et sont aussi différents de ceux des anciens catalogues.
Engagement
Sur l’offre basique :
- ajout de l’engagement 12 mois
- retrait de l’engagement 60 mois
Sur l’offre L2 premium
- retrait de l’engagement 60 mois
Sur l’offre L3 Internet
- ajout de l’engagement 48 mois
Offre L3
Le subnet /30 est maintenant inclus dans le prix
Option Express
On ne commercialise plus les express 4 jours, 3 semaines et 5 semaines.
Zones de FAS
Les zones de FAS sont unifiées entre l’offre Basique et la L2 Premium.
L’offre basique n’est accessible que dans les deux premières zones.
Le prix dépend de l’engagement.
Le numéro de la zone est indiqué dans les attributs.
Pendant la promotion du débit 1G, deux items sont dans le catalogue mais seul le moins cher ressort.
A la fin de l’offre promotionnelle, l’id utilisé dans les combinaisons changera et une nouvelle combinaison apparaîtra avec le prix normal.
Voici les identifiants qui vont changer
| Offre |
Secteur |
Prizz Télécom |
Prizz Infrastructure |
PricelistId Prizz Tel / Prizz Infra |
| L2 PREMIUM |
Dense |
1487 → 1189 |
1869 → 1834 |
60 / 77 |
| L2 PREMIUM |
Standard |
1486 → 1143 |
1822 → 1787 |
59 / 76 |
Exemple de combinaison qui va changer :
“combinationId”: “contract:1239&offer:1&items:1134,1153,1154,1170,1176,1486”
après la fin de la promo deviendra
“combinationId”: “contract:1239&offer:1&items:1134,1143,1153,1154,1170,1176”
3 - Tests d'éligibilité
Comment faire des tests d’éligibilités depuis l’API
Prérequis
Présentation
Le test d’éligibilité est asynchrone, une fois la demande envoyée vous obtenez un identifiant qui vous permet de suivre le traitement de la requête et d’obtenir les résultats quand celle-ci sera terminée.
participant Client as client
participant PrizzAPI as prizz
entity EligibilityProcess as elig
database SIG as sig
group Create query
client -> prizz : CreateEligibility
prizz -> elig : create process
activate elig
prizz -> client : return eligibility_id
end
group Fetch #1
client -> prizz : q1
prizz -> client : answer with pending status
end group
elig -> sig : query
sig -> elig : results
elig -> elig : make offers
deactivate elig
group Fetch #2
client -> prizz : q2
prizz -> client : answer with done status and results
end group
Première étape : connaître son ID client
Pour faire un test nous avons besoin de savoir pour quel client il est effectué. Votre token pouvant être associé à plusieurs entreprises. Cela nous permet de trouver les bon contrats et tarifs associés.
Vous devez donc connaître l’id de votre client, pour cela vous pouvez interroger cette route.
foreach ($prizzTelecom->getClientLegalEntities()->getItems() as $legalEntity) {
echo $legalEntity->getName() . " - " . $legalEntity->getId() . "\n";
}
// output :
// PRIZZ TELECOM - 32
//
// l'id a utiliser est 32
curl --request GET \
--location "${url_api}/external-api/v2/client_legal_entities" \
--header "Authorization: Token ${token}" \
| jq '.items[]|{name:.name, id:.id}'
# output:
# {
# "name": "PRIZZ TELECOM",
# "id": 32
# }
Parcourez le tableau items de la réponse afin de localiser le client pour lequel vous souhaitez effectuer un test d’éligibilité, notez son id (que nous appellerons {id_client} pour la suite de cet exemple).
Vous pouvez en faire un élément de configuration de votre projet, cet identifiant est stable.
Créer un test d’éligibilité par adresse
Vous pouvez maintenant créer un nouveau test d’éligibilité.
L’adresse, est au format texte. Elle doit être la plus précise possible et avoir un numéro dans la voie.
Documentation de la méthode.
$eligResult = $prizzTelecom->createEligibility(
"111 Rue Réaumur, 75002 Paris",
$legalEntity->getId() // 32
);
// Output :
// Array
// (
// [0] => 43
// )
export address="111 Rue Réaumur, 75002 Paris";
export id_client=32;
curl --request POST \
--location "${url_api}/external-api/v2/eligibility" \
--header "Authorization: Token ${token}" \
--header "Content-Type: application/json" \
--data "{\"address\": \"${address}\", \"clientId\": ${id_client}}"
Vous devriez récupérer l’id du test effectué dans la partie responses, 43 dans le cas présent.
Obtenir un id ne dit pas que l’adresse est éligible, mais qu’elle va être testée.
Créer un test d’éligibilité par latitude et longitude
Pour faire un test avec des coordonnées longitude, latitude il suffit de ne pas remplir le paramètre address mais lon et lat.
$eligResult = $prizzTelecom->createEligibility(
client_id: $myClientLegalEntity->getId(),
lon: 2.326099666185542,
lat: 48.867587467406395
);
// Output :
// Array
// (
// [0] => 43
// )
lon="2.326099666185542";
lat="48.867587467406395"
id_client=32;
curl --request POST \
--location "${url_api}/external-api/v2/eligibility" \
--header "Authorization: Token ${token}" \
--header "Content-Type: application/json" \
--data "{\"lon\": \"${lon}\", \"lat\": \"${lat}\", \"clientId\": ${id_client}}"
Obtenir le résultat du test
Comme indiqué précédemment, les tests d’éligibilité étant asynchrones, vous n’aurez pas le résultat lors de la création de la requête d’éligibilité.
Il vous faut faire appel cette méthode pour obtenir le résultat :
méthode.
$resp = $prizzTelecom->getEligibility(45);
foreach ($resp->getResponse() as $resp) {
echo $resp->getCode() .
" : " . $resp->getRcMin() / 100 .
" -> " . $resp->getRcMax() / 100 . " " .
"pricelist #" . $resp->getPriceListId() . "\n";
}
// Output :
// FON EVENTS : 5400 -> 5400 pricelist #4
// FON MAN : 350 -> 400 pricelist #7
// L2 Basique : 99 -> 200 pricelist #13
// L2 EVENT : 4500 -> 5050 pricelist #18
// L2 PREMIUM : 119 -> 699 pricelist #20
curl --request GET \
--location "${url_api}/external-api/v2/eligibility/${id_test}" \
--header "Authorization: Token ${token}"
En cas de succès, vous trouverez le résultat de l’éligibilité dans la partie response du retour.
4 - Souscription de services
La souscription passe par la création d’un devis sur cette offre. Cette API vous permet de créer vos devis. L’API est à votre disposition est assez riche, aussi, il existe plusieurs méthodes pour souscrire à une offre en utilisant différents cheminements.
Prérequis
Souscription
La souscription passe par la création d’un devis sur cette offre.
Selon comment vous exploitez la réponse de l’éligibilité plusieurs méthodes sont à votre disposition pour créer vos devis :
- rapide (recommandée) : ce que nous appelons le ‘fastOrder’ , vous permet de lancer une commande à partir d’une combinaison fournie dans la réponse d’éligibilité
- sur mesure méthode plus complexe a mettre en oeuvre, mais qui permet de faire un devis sans passer par l’éligibilité le test étant réalisé pendant le passage de la commande. Elle vous permet de passer les éléments (débit, engagement, GTR) directement.
4.1 - Commande rapide
Commande rapide à partir d’une combinaison du test d’éligibilité
Créer un devis via FastOrder
La séquence est la suivante :
- effectuer un test d’éligibilité à l’adresse à raccorder et choisir la combinaison désirée. La chaîne de caractères de l’attribut combination_id va nous permettre de créer un devis avec les items désirés.
- soumettre le devis : on va faire des vérifications, et donner un prix aux éléments qui nécessite une quotation
- signer le devis
Choisir une combinaison
foreach ($resp->getResponse() as $resp) {
if ($resp->getCode()=='ContractName') { //Nom du contrat recherché
foreach ($resp->getCombinations() as $combination) {
if ($combination['attributes']['bw_down'] == 100 && $combination['attributes']['grt_in_working_hours'] == false && $combination['attributes']['commitment_months']==12 ) {
//exemple d'une combiaison recherchée débit 100M engagment 12 mois avec une GTR HNO
$combination_id = $combination['combination_id'];
}
}
}
}
$elig_ctx_id = ; $eligResponse->getId(); // int | identifiant du contexte d'éligibilité
$combination_id = $combination_id; // string | valeur de la combinaison choisie parmi les choix proposées dans la réponse de l'api éligibilité
$fast_order = new \Infracorp\Extranet\Client\Model\FastOrder();
$fast_order->setName("Exemple Nom du client final"); // string | nom de la section du devis
$fast_order->setClientReference("Ref_Interne"); // falcutatif | nom de votre référence interne. Vous permettra de retrouver votre commande avec votre référence.
$fast_order->setCombinationId($combination_id);
try {
$commercialOffer= $prizzTelecom->fastOrder($elig_ctx_id, $fast_order);
} catch (Exception $e) {
echo 'Exception when calling DefaultApi->fastOrder: ', $e->getMessage(), PHP_EOL;
}
Si l’appel à FastOrder est un succès, elle vous retourne l’identifiant du devis créé. Celui contient les items correspondant à la combinaison choisie. Vous pouvez retourner consulter le devis il doit être à jour.
$result = $prizzTelecom->getCommercialOffer($commercialOfferId);
Demander la validation du devis
Une fois que vous avez terminé les modifications du devis vous pouvez nous le soumettre.
$prizzTelecom->submitCommercialOffer($commercialOffer->getId());
Une fois validé par nos services, la procédure de signature sera lancée. Vous recevrez un code par mail pour confirmer la commande.
Si vous voulez intégrer le mécanisme de signature vous pouvez valider le devis avec le code comme ceci :
$prizzTelecom->signCommercialOffer(
$commercialOffer->getId(),
(new SignCommercialOffer())->setCode("123456")
);
4.2 - Commande sur mesure
Cette méthode permet de créer des commandes en jouant sur tous les éléments du devis
Créer un devis sur mesure
La séquence est la suivante :
- commencer un devis pour un ClientLegalEntity
- ajouter une section : une section correspond a un service / accès
- créer la section (associée à un ClientContract)
- définir l’offre dans la section : par exemple, si c’est un accès : donner l’adresse a raccorder, la section sera remplie d’éléments qui formeront une première proposition
- personnaliser l’offre dans la section : c’est à cette étape que vous pouvez modifier le début et l’engagement, a l’étape précédente c’est une offre “par défaut” qui vous a été proposé
- ajouter une autre section en reprenant à l’étape 2 (si nécessaire)
- soumettre le devis : on va faire des vérifications, et donner un prix aux éléments qui nécessite une quotation
- signer le devis
En voici un, à titre d’exemple.
Dans cette page nous allons employer des termes en “français” et qui sont a associer à des objets “machine” dont le nom est anglicisé au sein de l’API, pour éviter des confusions nous vous invitons à consulter ce lexique en cas de doute
Commencer un devis
Trouver votre entité commerciale
$myClientLegalEntity = null;
foreach ($prizzTelecom->getClientLegalEntities()->getItems() as $clientLegalEntity) {
if ($clientLegalEntity->getName() == "My Company name") {
$myClientLegalEntity = $clientLegalEntity;
}
}
Note
Vous pouvez stocker l’id de cette entité, ce sera probablement un élément de configuration de votre côté. Il n’est pas nécessaire de le rechercher à chaque fois.
Faire un test d’éligibilité et sélectionner l’offre
On suppose qu’on veut souscrire un “L2 PREMIUM”. Première étape, on fait un test d’éligibilité.
$eligResult = $prizzTelecom->createEligibility(
"111 Rue Réaumur, 75002 Paris",
$myClientLegalEntity->getId()
);
On parcours les proposition de l’éligibilité pour ne retenir que le L2 PREMIUM. On récupère en passant l’id de l’offre et de la liste de prix.
$price_list_id = null;
$offer_id = null;
foreach ($eligResult->getResponses() as $response_id) {
$ret = $prizzTelecom->getEligibility($response_id);
foreach ($ret->getResponse() as $response) {
if ($response->getCode() == 'L2 PREMIUM') {
$price_list_id = $response->getPriceListId();
$offer_id = $response->getOfferId();
}
}
}
Choisir un contrat
Le ClientContract (contrat), c’est la glue entre un ClientLegalEntity (vous) et une PriceList. Il faut en choisir un pour commencer une section.
A noter qu’il peut il y avoir plusieurs ClientContract pour la même PriceList pour avoir une liste de contacts personnalisés, différents profil de configuration de la porte de collecte.
$myContract = null;
foreach ($myClientLegalEntity->getContracts() as $contract) {
if ($contract->getPriceList()->getId() == $price_list_id) {
$myContract = $contract;
}
}
Créer le devis
Il faut fournir en plus de votre ID celui de l’entité légale, on peut le trouver sur la liste de prix.
$legalEntityId = $prizzTelecom->getPriceList($price_list_id)->getLegalEntity()->getId();
$commercialOffer = $prizzTelecom->createCommercialOffer(
[
"legalEntityId" => $legalEntityId,
"clientLegalEntityId" => $clientLegalEntity->getId()
]
);
Note
Vous pouvez stocker l’id de la legalEntity, ce sera probablement un élément de configuration de votre côté. Il n’est pas nécessaire de le rechercher à chaque fois.
Ajouter une section au devis
Les devis sont découpé en sections, ainsi vous pouvez commander plusieurs prestations dans le même devis.
Chaque section est liée à un contrat, et à un nom. C’est ce nom qui sera présenté pour la facturation (vous disposez aussi d’un champ “référence client” que vous pourrez définir après validation du devis.
Il faut également préciser à nouveau l’adresse du livraison du service. Un ultime test d’éligibilité est refait juste avant le remplissage de la section.
$sectionParams = (new CreateCommercialOfferSection())
->setClientContractId($myContract->getId())
->setName("My new final customer");
$eligAddress = new SetCommercialOfferSectionOfferEligibility();
$eligAddress->setAddress("111 Rue Réaumur, 75002 Paris");
$section = $prizzTelecom->createCommercialOfferSection(
$commercialOffer->getId(),
$sectionParams
);
$offerParam = new SetCommercialOfferSectionOffer();
$offerParam
->setOfferId($offer_id)
->setEligibility($eligAddress);
$prizzTelecom->setCommercialOfferSectionOffer(
$commercialOffer->getId(),
$section->getId(),
$offerParam
);
Après cet appel, vous obtenez un devis avec une offre de “base” que vous pouvez déjà consulter dans l’espace client. Vous pouvez la modifier en mettant à jour la section.
Personnalisation : choix du débit, de la durée d’engagement
$itemsParameters = new UpdateCommercialOfferSectionItems();
$itemsParameters ->setBandwidth('100'); // il s'agit du débit en mb/s
$itemsParameters ->setGrt('4HNO'); // c'est la GTR au format : délai en heures suivi de son type HO ou HNO (cf paramètres utiles)
$update_commercial_offer_section_items->setCommitment('12'); // c'est l'engagement en mois
//$update_commercial_offer_section_items->setExpress('7'); // certaines offres disposent d'une option Express en jours, permettant un raccordement plus rapide contre rémunération.
$prizzTelecom->updateCommercialOfferSectionItems(
$commercialOffer->getId(),
$section->getId(),
$itemsParameters
);
Vous pouvez retourner consulter le devis il doit être à jour.
Demander la validation du devis
Une fois que vous avez terminé les modifications du devis vous pouvez nous le soumettre.
$prizzTelecom->submitCommercialOffer($commercialOffer->getId());
Une fois validé par nos services, la procédure de signature sera lancée. Vous recevrez un code par mail pour confirmer la commande.
Attention
Attention : le contenu du devis peut avoir changé s’il y avait des éléments qui nécessitaient une estimation.
Si vous voulez intégrer le mécanisme de signature vous pouvez valider le devis avec le code comme ceci :
$prizzTelecom->signCommercialOffer(
$commercialOffer->getId(),
(new SignCommercialOffer())->setCode("123456")
);
4.3 - Suivi de commande
Suivre l’avancement d’une commande
Après la signature d’une commande
Une fois que vous avez soumis et signé le devis, il y a une étape de vérification et de validation de celui-ci par nos services. Cette étape terminée, un pack de services, avec une référence de contrat de service, est créé pour chaque section du devis. Il vous est nécessaire de récupérer cette référence de contrat de service afin de pouvoir effectuer le suivi de la commande. Pour cela, il est préférable de créer une cron pour surveiller l’apparition de cette référence.
$commercialOffer = $prizzTelecom->getCommercialOffer($commercialOfferId);
foreach ($commercialOffer->getSections() as $section) {
$serviceContract = $section->getServiceContract();
}
Suivi de la commande
Une fois la référence de contrat de service récupérée, vous pouvez effectuer le suivi de la commande,
- soit via l’id du contrat de service
$serviceContract = $prizzTelecom->getServiceContract($serviceContract->getId());
- soit via le nom du contrat de service
$serviceContract = $prizzTelecom->getServiceContractByName($serviceContract->getName());
Et voici une partie des informations contenues dans le contrat de service, qui vous permet notamment de suivre l’activation du lien.
$serviceContract = $prizzTelecom->getServiceContract($serviceContractId);
echo "Nom : ".$serviceContract->getName()."\n";
echo "RefService : ".$serviceContract->getRefService()."\n";
echo "RefClient : ".$serviceContract->getRefClient()."\n";
echo "Statut : ".$serviceContract->getStatus()."\n";
echo "Date souscription : ".$serviceContract->getSubscriptionDate()->format("Y/m/d H:i:s")."\n";
echo "Date activation : ".$serviceContract->getActivationDate()->format("Y/m/d H:i:s")."\n";
echo "Offre : ".$serviceContract->getOffer()->getName()."\n";
foreach ($serviceContract->getServices() as $service) {
echo "- Produit : ".$service->getProduct()->getName()."\n";
echo "- Statut : ".$service->getStatus()."\n";
echo "- Date activation : ".$service->getActivationDate()->format("Y/m/d H:i:s")."\n";
echo "- Quantité : ".$service->getQuantity()."\n";
echo "- Prix unitaire : ".$service->getUnitPrice()."\n";
echo "- Remise : ".$service->getUnitPriceDiscount()."\n";
echo "- Adresse : ".$service->getHouseNumber()." ".$service->getHouseNumberComplement()." ".$service->getStreetName()." ".$service->getPostalCode()." ".$service->getCityName()."\n";
}
5 - Obtenir les prix d'une offre sans passer par un devis
Sur vos contrats vous avez accès à des listes de prix, celles-ci ne permettent pas à elles seule de calculer une offre parce qu’il existe des règles (exceptions) qui peuvent faire varier le prix. Jusque là, il fallait passer par la création d’un devis pour connaître le prix définitif (hors FAS a estimer).
Vous pouvez interroger notre API pour obtenir les combinaisons possible sur ces deux endpoint :
- offers/{id}/contexts
- offers/{id}/contexts/shortened
et tester votre combinaison d’items sur ce endpoint
Obtenir l’ensemble des combinaisons possibles pour une offre
Pour utiliser ces routes ils vous suffit de passer l’identifiant d’une liste de prix, vous pouvez trouver cet identifiant en parcourant la liste de vos contrats en parcourant l’attribut contracts.
Comme il peut il y avoir beaucoup de combinaisons la réponse peut être volumineuse et peut lisible, c’est pourquoi vous pouvez aussi utiliser une version ou chaque proposition est résumée :
Les deux routes prennent les même arguments
Exemple
offers/{idOffre}/contexts?priceList={priceListId}
Les principal combinaisons pour nos offres
| Offre |
Id offre |
priceList pour Prizz Infrastructures |
priceList pour Prizz Télécom |
| L2 PREMIUM |
1 |
24 |
25 |
| L2 BASIC |
5 |
16 |
17 |
| L3 INTERNET |
4 |
|
29 |
A titre de comparaison, voici un élément de la version résumée
[{
"offerId": 1,
"isValid": false,
"total": 9900,
"totalWithoutNrc": 9900,
"items_id": [71,149,73,115,105],
"hasToEstimateProducts": false,
"attributes": {
"offer_type": 1,
"bw_down": 10,
"bw_down_guaranteed": 10,
"bw_up_guaranteed": 10,
"bw_up": 10,
"national": 0,
"commitment_months": 36,
"construction_time_in_days": 42,
"eligibility_string": "f1"
}
}]
et le même dans sa version longue
[{
"offerId": 1,
"isValid": false,
"total": 9900,
"totalWithoutNrc": 9900,
"items": [
{
"priceListId": 24,
"product": {
"productCode": "pl2",
"group": null,
"id": 3,
"name": "Liaison L2",
"attributes": {
"offer_type": 1
}
},
"commercialCode": "pl2",
"description": "Liaison L2",
"insideOfferOnly": true,
"toEstimate": false,
"active": true,
"id": 71,
"createDate": "2024-03-19T15:41:32+01:00",
"lastModifiedDate": "2024-03-19T15:41:32+01:00",
"name": "prizzl2",
"unitPrice": 9900,
"unitPriceStr": "99.00",
"unit": null,
"vat": "TVA_FR_NORMAL",
"recurrence": "monthly"
},
{
"priceListId": 24,
"product": {
"productCode": "pl2_local",
"group": {
"type": "national",
"name": "national_L2 PREMIUM"
},
"id": 42,
"name": "Liaison L2 collecte locale",
"attributes": {
"national": 0
}
},
"commercialCode": "pl2_local",
"description": "Porte de livraison locale : accès dans la même zone",
"insideOfferOnly": true,
"toEstimate": false,
"active": true,
"id": 149,
"createDate": "2024-03-19T15:41:32+01:00",
"lastModifiedDate": "2024-03-19T15:41:32+01:00",
"name": "prizzl2_local",
"unitPrice": 0,
"unitPriceStr": "0.00",
"unit": null,
"vat": "TVA_FR_NORMAL",
"recurrence": "monthly"
},
{
"priceListId": 24,
"product": {
"productCode": "pl2020",
"group": {
"type": "bandwidth",
"name": "bandwidth_L2 PREMIUM"
},
"id": 4,
"name": "Liaison L2 10Mbps",
"attributes": {
"bw_down": 10,
"bw_down_guaranteed": 10,
"bw_up_guaranteed": 10,
"bw_up": 10
}
},
"commercialCode": "pl2020",
"description": "Débit 10Mb/s",
"insideOfferOnly": true,
"toEstimate": false,
"active": true,
"id": 73,
"createDate": "2024-03-19T15:41:32+01:00",
"lastModifiedDate": "2024-03-19T15:41:32+01:00",
"name": "prizzl2020",
"unitPrice": 0,
"unitPriceStr": "0.00",
"unit": null,
"vat": "TVA_FR_NORMAL",
"recurrence": "monthly"
},
{
"priceListId": 24,
"product": {
"productCode": "pl2_nrc_Z1B",
"group": {
"type": "nrc",
"name": "nrc_L2 PREMIUM"
},
"id": 25,
"name": "Liaison L2 FAS ZONE 1",
"attributes": {
"construction_time_in_days": 42,
"eligibility_string": "f1"
}
},
"commercialCode": "pl2_nrc_Z1B",
"description": "FAS ZONE 1",
"insideOfferOnly": true,
"toEstimate": false,
"active": true,
"id": 115,
"createDate": "2024-03-19T15:41:32+01:00",
"lastModifiedDate": "2024-03-19T15:41:32+01:00",
"name": "prizz Liaison L2 FAS ZONE 1",
"unitPrice": 0,
"unitPriceStr": "0.00",
"unit": null,
"vat": "TVA_FR_NORMAL",
"recurrence": null
},
{
"priceListId": 24,
"product": {
"productCode": "pl2_cmt_36",
"group": {
"type": "commitment",
"name": "commitment_L2 PREMIUM"
},
"id": 20,
"name": "Liaison L2 Engagement 36 mois",
"attributes": {
"commitment_months": 36
}
},
"commercialCode": "pl2_cmt_36",
"description": "Engagement 36 mois",
"insideOfferOnly": true,
"toEstimate": false,
"active": true,
"id": 105,
"createDate": "2024-03-19T15:41:32+01:00",
"lastModifiedDate": "2024-03-19T15:41:32+01:00",
"name": "prizzLiaison L2 Engagement 36 mois",
"unitPrice": 0,
"unitPriceStr": "0.00",
"unit": null,
"vat": "TVA_FR_NORMAL",
"recurrence": "monthly"
}
]
},
]
Tester directement une combinaison
Cette route vous permet de tester une combinaison pour une offre que vous formez vous même.
Les éléments qui la compose doivent appartenir à la même liste de prix.
offers/1/context?items[]=121&items[]=536&items[]=73&items[]=71&items[]=113&items[]=149
{
"offerId": 1,
"isValid": true,
"total": 104900,
"totalWithoutNrc": 14900,
"items": [
{
L’attribut isValid de la réponse confirme que la combinaison que vous testez est correcte.
A savoir pour construire vos listes d’items
Chez nous, une offre, c’est un item de base associé à une liste d’items qui appartiennent à un groupe qui lui même correspond à un choix que l’on peut faire pour définir un accès. Par exemple, il y a un groupe pour la bande passante, un autre pour la durée d’engagement etc..
Lorsque vous consultez un item d’une liste de prix il faut regarder la clé product qui contient elle même une clé group
En règle général, chaque groupe doit contenir au moins un élément.
Listes des groupes par offre
L2 PREMIUM
| type |
min |
max |
| bandwidth |
1 |
1 |
| commitment |
1 |
1 |
| express |
0 |
1 |
| grt |
1 |
1 |
| national |
1 |
1 |
| nrc |
1 |
1 |
L2 BASIC
| type |
min |
max |
| bandwidth |
1 |
1 |
| commitment |
1 |
1 |
| express |
0 |
1 |
| grt |
1 |
1 |
| nrc |
1 |
1 |
L3 INTERNET
| type |
min |
max |
| bandwidth |
1 |
1 |
| commitment |
1 |
1 |
| express |
0 |
1 |
| grt |
1 |
1 |
| nrc |
1 |
1 |
| subnet |
1 |
1 |
6 - Subnet attribué à un L3
Déterminer l’IP attribuée à un service
Sur un contrat de services vous trouverez les détails du subnet attribué à votre service L3.
Les attributs sont placés sur deux clés :
- la clé
consolidatedAttributesStagingOrNew qui contient les valeurs souhaitées pour votre service lorsque celui-ci n’est pas encore livré ou est en cours de mise à jour
- et la clé
consolidatedAttributes contient les valeurs de production.
Exemple :
...
"consolidatedAttributes": {
"subnet": "192.0.2.24/30",
"subnet_gateway": "192.0.2.25",
"subnet_mask": "255.255.255.252",
"subnet_range": [
"192.0.2.26"
]
},
...
7 - Doc de référence
Consulter la documentation généré automatiquement à partir du code de l’API
Elle vous attend là : https://dev.prizz-telecom.fr/openapi-external.html