Demande d'éligibilité
Fonctionnement
sequenceDiagram
participant Client
participant Covage API
participant Covage Backend
Client->>Covage API: Demande des familles d'offres vendues par Covage
Covage API-->>Client: Liste des familles d'offres
Client->>Covage API: Demande d'éligibilité d'un site à plusieurs famille d'offres
Covage API-->>Client: Identifiant de la demande d'éligibilité
Covage API->>Covage Backend: Demande d'éligibilité d'un site à plusieurs offres
Covage Backend-->>Covage API: Liste des offres éligibles à cette adresse
Client->>Covage API: Récupération des résultats d'éligibilité
Covage API-->>Client: Résultats d'éligibilité
Client->>Covage API: Détail d'une offre
Covage API->>Covage Backend: Demande de détail d'un pack avec détail et prix
Covage Backend-->>Covage API: Détail du pack
Covage API-->>Client: Détail de l'offre
Cycle de vie d'une éligibilité
flowchart LR
A[<a href='/api-eligibilite-offres/#demande-deligibilite-dun-site-a-plusieurs-offres'>Création d'une\n demande d'éligibilité</a>] -->B(<i>acknowledged</i>)
B -->|Début du\n traitement| C(<i>in_progress.elig</i>)
C -->D{Contrôle\n données\n OK ?}
D -->|non| T[<i>terminated_with_error</i>]
D -->|oui| F(<i>in_progress.offer</i>)
F -->K{éligible ?}
K -->|non| U[<i>done.unable_to_provide</i>]
K -->|oui| G{Calcul des\n prix ?}
G -->|non| H{Sur devis ?}
H -->|oui| U
H -->|non| R
G -->|oui| P(<i>in_progress.price</i>)
P -->R[<i>done.ready</i>]
Demande des familles d'offres vendues par Covage
Récupération des familles d'offres vendues par Covage
GET /api/v1/catalog/category/
Réponse
| Nom |
Type |
Description |
Obligatoire |
| name |
string |
Nom de la famille d'offres ('BPE','BPEA') |
Oui |
| type |
string |
Type de famille d'offres ('OFFER_FAMILY') |
Oui |
| description |
string |
Description de la famille d'offres |
Non |
Exemple
{
"name": "BPE",
"type": "OFFER_FAMILY",
"description": ""
}
Demande d'éligibilité d'un site à plusieurs offres
Création d'une demande d'éligibilité pour vérifier l'éligibilité d'une adresse à une ou plusieurs offres.
POST /api/v1/product_offering_qualification/
Paramètres de la requête
| Nom |
Type |
Description |
Obligatoire |
| external_id |
string |
Identifiant externe pour la demande |
Non |
| project_id |
string |
Identifiant du projet associé |
Non |
| product_offering_qualification_items |
array |
Liste des éléments de qualification d'offre |
Oui |
Exemple
{
"external_id": "123",
"project_id": "456",
"product_offering_qualification_items": [...]
}
Détail des éléments de qualification d'offre
| Nom |
Type |
Description |
Obligatoire |
| offer_families |
array |
Familles d'offres demandées |
Oui |
| eligibility_id |
string |
Identifiant de l'éligibilité (issu de l'API de recherche d'adresse) |
Oui |
| resolve_pricing |
bool |
Récupérer les prix des articles (par défaut non) |
Non |
| address |
object |
Détail de l'adresse à vérifier |
Non |
Exemple
"product_offering_qualification_items": [
{
"offer_families": ["BPEA","BPE"],
"eligibility_id": "{eligibility_id}",
"resolve_pricing": false,
"address": {}
}]
Détail de l'adresse
| Nom |
Type |
Description |
Obligatoire |
| label |
string |
Étiquette de l'adresse |
Non |
| street_ext |
string |
Extension de la rue |
Non |
| street_nr |
string |
Numéro de la rue |
Non |
| city |
object |
Détail de la ville |
Non |
| street |
object |
Détail de la rue |
Non |
Exemple
"address": {
"label": "4bis Rue Andrei Sakharov 76130 Mont-Saint-Aignan",
"street_ext": "B",
"street_nr": "4",
"city": {},
"street": {}
}
Détail de la ville
| Nom |
Type |
Description |
Obligatoire |
| city_id |
string |
Identifiant de la ville |
Non |
| insee_code |
string |
Code INSEE de la ville |
Non |
| city_name |
string |
Nom de la ville |
Non |
| post_code |
string |
Code postal de la ville |
Non |
Exemple
"city": {
"city_id": "76451",
"insee_code": "76451",
"city_name": "MONT ST AIGNAN",
"post_code": "76130"
}
Détail de la rue
| Nom |
Type |
Description |
Obligatoire |
| street_id |
string |
Identifiant de la rue |
Non |
| street_name |
string |
Nom de la rue |
Non |
Exemple
"street": {
"street_id": "76451055R",
"street_name": "Rue Andrei Sakharov"
}
Exemple de param de la requête finale
{
"external_id": "123",
"project_id": "456",
"product_offering_qualification_items": [
{
"offer_families": [
"BPEA","BPE"
],
"eligibility_id": "KHg6MS4wOTIxMDgxO3k6NDkuNDc0Mzk3MTtiOklNQi83NjQ1MS9DLzAwMTkp",
"address": {
"label": "4bis Rue Andrei Sakharov 76130 Mont-Saint-Aignan",
"street_ext": "B",
"street_nr": "4",
"city": {
"city_id": "76451",
"insee_code": "76451",
"city_name": "MONT ST AIGNAN",
"post_code": "76130"
},
"street": {
"street_id": "76451055R",
"street_name": "Rue Andrei Sakharov"
}
}
}
]
}
Réponse
| Nom |
Type |
Description |
| id |
string |
Identifiant de la demande d'éligibilité |
| creation_date |
string |
Date de création |
{
"id": "2eaf7b5b-384d-4cb7-8d9b-09ac712354d7",
"creation_date": "2025-04-04T10:07:24.274+02:00",
}
Demande d'éligibilité d'un site à plusieurs offres (synchrone)
POST /api/v1/product_offering_qualification/sync/
Identique à l'endpoint asynchrone POST /api/v1/product_offering_qualification/, mais retourne les résultats directement dans la réponse sans passer par le mécanisme de polling.
Recommandation
Cet endpoint est recommandé lorsque vous souhaitez obtenir le résultat immédiatement. Préférer la version synchrone pour les usages en production.
Les paramètres et la réponse sont identiques à POST /api/v1/product_offering_qualification/.
Liste des demandes d'éligibilité
GET /api/v1/product_offering_qualification/
Liste ou recherche les demandes d'éligibilité soumises par le client.
Filtres disponibles (query params) :
| Paramètre |
Type |
Description |
state |
string |
Filtre par état (pending, done, failed…) |
external_id |
string |
Filtre par identifiant externe |
project_id |
string |
Filtre par identifiant de projet |
creation_date_gt |
datetime |
Demandes créées après cette date (ISO 8601) |
creation_date_lt |
datetime |
Demandes créées avant cette date (ISO 8601) |
Réponse : Liste paginée de demandes d'éligibilité (mêmes champs que GET /product_offering_qualification/{id}/).
Récupération des résultats d'éligibilité
Récupération des résultats d'éligibilité d'une demande d'éligibilité.
GET /api/v1/product_offering_qualification/{id}/
Paramètres de la requête
| Nom |
Type |
Description |
Obligatoire |
| id |
string |
Identifiant de la demande d'éligibilité |
Oui |
Réponse
| Nom |
Type |
Description |
Obligatoire |
| id |
string |
Identifiant de la demande d'éligibilité |
Oui |
| user |
object |
Utilisateur qui a fait la demande d'éligibilité |
Oui |
| creation_date |
string |
Date de création de la demande |
Oui |
| external_id |
string |
Identifiant externe pour la demande |
Non |
| project_id |
string |
Identifiant du projet associé |
Non |
| effective_qualification_date |
string |
Date d'éligibilité effective |
Non |
| href |
string |
Lien vers la ressource |
Non |
| state |
string |
État actuel de la demande |
Oui |
| state_change |
array |
Historique des changements d'état |
Oui |
| product_offering_qualification_item_detail |
array |
Liste des éléments de qualification d'offre |
Non |
Exemple
{
"id": "2eaf7b5b-384d-4cb7-8d9b-09ac712354d7",
"user": {
"email": "anonymous@example.fr",
"first_name": "Ano",
"last_name": "Nymous"
},
"creation_date": "2025-04-04T10:07:24.274+02:00",
"external_id": "987654",
"project_id": "456789",
"effective_qualification_date": null,
"href": "",
"state": "done.ready",
"state_change": [...],
"product_offering_qualification_item_detail": [...]
}
Détail d'un utilisateur
| Nom |
Type |
Description |
Obligatoire |
| email |
string |
Email de l'utilisateur |
Oui |
| first_name |
string |
Prénom de l'utilisateur |
Oui |
| last_name |
string |
Nom de l'utilisateur |
Oui |
Exemple
"user": {
"email": "anonymous@example.fr",
"first_name": "Ano",
"last_name": "Nymous"
}
Détail des changements d'état
| Nom |
Type |
Description |
Obligatoire |
| change_reason |
string |
Raison du changements d'état |
Oui |
| change_date |
string |
Date du changements d'état |
Oui |
| state |
string |
Nouvel état |
Oui |
Exemple
"state_change": [
{
"change_reason": "",
"change_date": "2025-04-04T10:07:24.276+02:00",
"state": "acknowledged"
},
{
"change_reason": "",
"change_date": "2025-04-04T10:07:24.678+02:00",
"state": "in_progress.elig"
},
{
"change_reason": "",
"change_date": "2025-04-04T10:07:24.791+02:00",
"state": "in_progress.offer"
},
{
"change_reason": "",
"change_date": "2025-04-04T10:07:26.332+02:00",
"state": "done.ready"
}]
Détail des éléments de qualification d'offre
| Nom |
Type |
Description |
Obligatoire |
| id |
string |
Identifiant de l'élément de qualification |
Oui |
| user |
object |
Utilisateur qui a fait la demande d'éligibilité |
Oui |
| tarif_zone |
string |
Zone tarifaire |
Oui |
| offer_families |
array |
Familles d'offres disponibles |
Oui |
| zone_bpe |
number |
Zone BPE (ex: 1 correspond à THD ZONE 1) |
Oui |
| zone_bpea |
number |
Zone BPEA (ex: 3 correspond à THD ZONE 3) |
Oui |
| zone_dia |
number |
Zone DIA (ex: 2 correspond à THD ZONE 2) |
Oui |
| estimated_delivery_date_BPE |
string |
Date de livraison prévue BPE (ex: "T0 + 33 SEMAINES") |
Oui |
| estimated_delivery_date_BPEA |
string |
Date de livraison prévue BPEA (ex: "T0 + 33 SEMAINES") |
Oui |
| estimated_delivery_date_DIA |
string |
Date de livraison prévue DIA (ex: "T0 + 34 SEMAINES") |
Oui |
| bandwidth_max |
float |
Débit maximal disponible sur le site |
Non |
| density |
string |
Densité de la zone |
Oui |
| place |
object |
Détail du lieu |
Oui |
| address |
object |
Détail de l'adresse |
Non |
| guaranteed_until_date |
string |
Date jusqu'à laquelle l'offre est garantie |
Non |
| price |
number |
Prix produit |
Non |
| far |
number |
Prix FAR |
Non |
| fas |
number |
Prix FAS |
Non |
| state |
string |
État actuel de l'élément |
Oui |
| state_change |
array |
Historique des changements d'état |
Oui |
| product_offering_qualification_id |
string |
Identifiant de la demande d'éligibilité parente |
Non |
| products_offering |
array |
Liste des offres éligibles |
Oui |
| resolve_pricing |
boolean |
Indique si les prix ont été calculés pour cette demande |
Oui |
Exemple
"product_offering_qualification_item_detail": [
{
"id": "a4517ca6-1f13-42a2-9359-4ff3cc21785b",
"user": {
"email": "anonymous@example.fr",
"first_name": "Ano",
"last_name": "Nymous"
},
"tarif_zone": "",
"offer_families": ["BPEA","BPE"],
"zone_bpe": 2,
"zone_bpea": 2,
"zone_dia": 2,
"estimated_delivery_date_BPE": "T0 + 33 SEMAINES",
"estimated_delivery_date_BPEA": "T0 + 33 SEMAINES",
"estimated_delivery_date_DIA": "T0 + 34 SEMAINES",
"bandwidth_max": 1000,
"density": "TRESDENSE",
"place":{},
"address": {},
"guaranteed_until_date": null,
"price": 145.0,
"far": 0.0,
"fas": 0.0,
"state": "done.ready",
"state_change": [...],
"product_offering_qualification_id": null,
"products_offering": [...]
Détail du lieu
| Nom |
Type |
Description |
Obligatoire |
| location |
object |
Coordonnées géographiques |
Oui |
| building_ref |
string |
Référence du bâtiment |
Non |
| eligibility_id |
string |
Identifiant de l'éligibilité |
Oui |
Exemple
"place": {
"location": {
"x": 1.0741197,
"y": 49.4629709
},
"building_ref": "",
"eligibility_id": "KHg6MS4wNzQxMTk3O3k6NDkuNDYyOTcwOTtiOk5vbmUp"
}
Détail de l'adresse
| Nom |
Type |
Description |
Obligatoire |
| label |
string |
Étiquette de l'adresse |
Non |
| street_ext |
string |
Extension de la rue |
Non |
| street_nr |
string |
Numéro de la rue |
Non |
| city |
object |
Détail de la ville |
Non |
| street |
object |
Détail de la rue |
Non |
Exemple
"address": {
"label": "4bis Rue Andrei Sakharov 76130 Mont-Saint-Aignan",
"street_ext": "B",
"street_nr": "4",
"city": {},
"street": {}
}
Détail de la ville
| Nom |
Type |
Description |
Obligatoire |
| city_id |
string |
Identifiant de la ville |
Non |
| insee_code |
string |
Code INSEE de la ville |
Non |
| city_name |
string |
Nom de la ville |
Non |
| post_code |
string |
Code postal de la ville |
Non |
Exemple
"city": {
"city_id": "76451",
"insee_code": "76451",
"city_name": "MONT ST AIGNAN",
"post_code": "76130"
}
Détail de la rue
| Nom |
Type |
Description |
Obligatoire |
| street_id |
string |
Identifiant de la rue |
Non |
| street_name |
string |
Nom de la rue |
Non |
Exemple
"street": {
"street_id": "76451055R",
"street_name": "Rue Andrei Sakharov"
}
Détail des offres
| Nom |
Type |
Description |
Obligatoire |
| product_id |
string |
Identifiant de l'offre (product_offering) |
Oui |
| name |
string |
Nom du produit |
Oui |
| description |
string |
Description du produit |
Oui |
| bandwidth |
string |
Bande passante du produit |
Oui |
| bandwidth_guarantee |
float |
Bande passante garantie |
Oui |
| bandwidth_max |
float |
Bande passante maximale |
Oui |
| commitment |
string |
Engagement du produit |
Oui |
| offer_technology |
string |
Technologie de l'offre |
Oui |
| offer_family |
string |
Famille de l'offre |
Oui |
| tarif_zone |
string |
Zone tarifaire |
Oui |
| price |
number |
Prix du produit |
Non |
| far |
number |
Prix du FAR |
Non |
| fas |
number |
Prix du FAS |
Non |
| on_quotation |
boolean |
Indique si l'offre est sur devis |
Oui |
Exemple
"products_offering":
[{
"product_id": "2173",
"name": "BPEA 20M/100M_24 mois",
"description": "BPEA 20M/100M",
"bandwidth": "20M",
"bandwidth_guarantee": 20.0,
"bandwidth_max": 20.0,
"commitment": "24MOIS",
"offer_technology": "FIBDE",
"offer_family": "BPEA",
"tarif_zone": ""
"price": null,
"far": null,
"fas": null,
"on_quotation": false
}]
Liste d'offres
Récupération d'une liste d'offres.
GET /api/v1/catalog/product_offering/
Détail d'une offre
Récupération du détail d'une offre.
GET /api/v1/catalog/product_offering/{id}/
Liste d'offres avec prix
POST /api/v1/catalog/product_offering/
Récupère une liste d'offres de produits par identifiant, enrichie de leurs tarifs (far/fas/prix).
Corps de la requête : Liste d'identifiants d'offres (list[string])
["BPE_100M_24MOIS", "BPEA_20M_24MOIS"]
Réponse :
| Champ |
Type |
Description |
id |
string |
Identifiant de l'offre |
name |
string |
Nom de l'offre |
description |
string |
Description de l'offre |
bandwidth |
string |
Bande passante |
bandwidth_max |
float |
Bande passante max |
bandwidth_guarantee |
float |
Bande passante garantie |
commitment |
string |
Durée d'engagement |
tarif_zone |
string |
Zone tarifaire |
far |
float |
Frais d'accès au réseau |
fas |
float |
Frais d'accès au service |
price |
float |
Prix mensuel récurrent |
offer_family |
string |
Famille d'offre (BPE, BPEA, DIA…) |
offer_technology |
string |
Technologie d'offre |
last_update |
datetime |
Date de dernière mise à jour (ISO 8601) |
Paramètres de la requête
| Nom |
Type |
Description |
Obligatoire |
| id |
string |
Identifiant de l'offre (product_offering) |
Oui |
| zone |
integer |
Zone tarifaire (provenant de l'éligibilité) |
Non |
Réponse
| Nom |
Type |
Description |
Obligatoire |
| id |
string |
Identifiant de l'offre |
Oui |
| href |
string |
Lien vers la ressource |
Oui |
| name |
string |
Nom de l'offre |
Oui |
| description |
string |
Description de l'offre |
Oui |
| bandwidth |
string |
Bande passante |
Oui |
| bandwidth_guarantee |
float |
Bande passante garantie |
Oui |
| bandwidth_max |
float |
Bande passante maximum |
Oui |
| commitment |
string |
Engagement de l'offre |
Oui |
| tarif_zone |
string |
Zone tarifaire |
Oui |
| far |
number |
Valeur FAR |
Oui |
| fas |
number |
Valeur FAS |
Oui |
| price |
number |
Prix de l'offre |
Oui |
| recurring |
boolean |
Indique si l'offre est récurrente |
Oui |
| offer_family |
string |
Famille de l'offre |
Oui |
| offer_technology |
string |
Technologie de l'offre |
Oui |
| available_options |
array |
Options disponibles pour l'offre |
Oui |
| last_update |
string |
Date de la dernière mise à jour |
Oui |
Exemple
{
"id": "1765",
"href": "",
"name": "BPE 20M _Zone dense_24 mois ",
"description": "description",
"bandwidth": "20M",
"bandwidth_guarantee": 20.0,
"bandwidth_max": 20.0,
"commitment": "24MOIS",
"tarif_zone": "DENSE",
"far": 240.0,
"fas": 360.0,
"price": 155.0,
"recurring": true,
"offer_family": "BPE",
"offer_technology": "FIBDE",
"available_options": [...],
"last_update": "2024-06-22T08:28:06Z"
}
Détail des options disponibles
| Nom |
Type |
Description |
Obligatoire |
| name |
string |
Nom de l'option |
Oui |
| type |
string |
Type de l'option |
Oui |
| values |
array |
Valeurs associées à l'option |
Oui |
Exemple
{
"name": "SECURISATIONCOLLECTE",
"type": "Option",
"values": []
}
Détail des valeurs d'option
| Nom |
Type |
Description |
Obligatoire |
| option_id |
string |
Identifiant de l'option |
Oui |
| label |
string |
Étiquette de l'option |
Oui |
| price |
number |
Prix de l'option |
Oui |
| recurring |
boolean |
Indique si l'option est récurrente |
Oui |
Exemple
{
"option_id": "241",
"label": "SECURISATION COLLECTE Active - Passive",
"price": 10.0,
"recurring": true
}
Demande des types de site de raccordement disponibles
Récupération des types de site de raccordement disponibles
GET /api/v1/referential/site_connection/
Réponse
| Nom |
Type |
Description |
Obligatoire |
| available_site_connection_types |
array |
Liste des types de site de raccordement disponibles |
Oui |
Exemple
{
"available_site_connection_types": [
"Standard ou non-catégorisé",
"Centre commercial",
"Datacenter",
"Zone d'activité ZA",
"Aéroport",
"Zone maritime",
"Centre de santé ou hôpital",
"Etablissement haute sécurité",
"Etablissement patrimoine",
"Prison",
"Cimetière"
]
}
Liste des éléments d'éligibilité
GET /api/v1/product_offering_qualification_item/
Liste ou recherche les éléments d'éligibilité (résultats individuels par site).
Filtres disponibles (query params) :
| Paramètre |
Type |
Description |
state |
string |
Filtre par état |
density |
string |
Filtre par densité (préfixe, ex : T) |
building_ref |
string |
Filtre par référence bâtiment (préfixe) |
offer_technologies |
string |
Filtre par technologie(s) (valeurs séparées par virgule) |
creation_date_gt |
datetime |
Éléments créés après cette date (ISO 8601) |
creation_date_lt |
datetime |
Éléments créés avant cette date (ISO 8601) |
search |
string |
Recherche textuelle libre |
sort |
string |
Champ de tri |
Réponse : Liste paginée d'éléments (mêmes champs que GET /product_offering_qualification_item/{id}/).
Détail d'un élément d'éligibilité
GET /api/v1/product_offering_qualification_item/{id}/
Récupère le détail d'un élément d'éligibilité individuel.
Paramètre URL :
| Nom |
Type |
Obligatoire |
Description |
id |
UUID |
✅ |
Identifiant de l'élément |
Réponse :
| Champ |
Type |
Description |
id |
UUID |
Identifiant unique |
creation_date |
datetime |
Date de création (ISO 8601) |
density |
string |
Densité de la zone |
offer_families |
array |
Familles d'offres demandées |
offer_families_eligibility |
array |
Familles d'offres éligibles |
offer_technologies |
array |
Technologies éligibles |
zone_bpe |
string |
Zone tarifaire BPE |
zone_bpea |
string |
Zone tarifaire BPEA |
zone_dia |
string |
Zone tarifaire DIA |
estimated_delivery_date_BPE |
string |
Date de livraison estimée pour BPE |
estimated_delivery_date_BPEA |
string |
Date de livraison estimée pour BPEA |
estimated_delivery_date_DIA |
string |
Date de livraison estimée pour DIA |
bandwidth_max |
float |
Bande passante maximale disponible |
place |
object |
Localisation (coordonnées, building_ref, eligibility_id) |
address |
object |
Adresse postale |
state |
string |
État de l'élément |
product_offering_qualification_id |
UUID |
Identifiant de la demande d'éligibilité parente |
guaranteed_until_date |
datetime |
Date de validité de l'éligibilité |