Eligibility Request
Operation
sequenceDiagram
participant Client
participant Covage API
participant Covage Backend
Client->>Covage API: Request for offer families sold by Covage
Covage API-->>Client: List of offer families
Client->>Covage API: Eligibility request for a site to multiple offer families
Covage API-->>Client: Eligibility request ID
Covage API->>Covage Backend: Eligibility request for a site to multiple offers
Covage Backend-->>Covage API: List of eligible offers for this address
Client->>Covage API: Retrieve eligibility results
Covage API-->>Client: Eligibility results
Client->>Covage API: Offer details
Covage API->>Covage Backend: Request for pack details with details and price
Covage Backend-->>Covage API: Pack details
Covage API-->>Client: Offer details
Lifecycle of an eligibility
flowchart LR
A[<a href='/en/api-eligibilite-offres/#eligibility-request-for-a-site-to-multiple-offers'>Creation of an eligibility request</a>] -->B(<i>acknowledged</i>)
B -->|Processing start| C(<i>in_progress.elig</i>)
C -->D{Data\n Control\n OK ?}
D -->|no| T[<i>terminated_with_error</i>]
D -->|yes| F(<i>in_progress.offer</i>)
F -->K{eligible ?}
K -->|no| U[<i>done.unable_to_provide</i>]
K -->|yes| G{Price calculation ?}
G -->|no| H{On quote ?}
H -->|yes| U
H -->|no| R
G -->|yes| P(<i>in_progress.price</i>)
P -->R[<i>done.ready</i>]
Request for Offer Families Sold by Covage
Retrieving the offer families sold by Covage
GET /api/v1/catalog/category
Response
| Name |
Type |
Description |
Required |
| name |
string |
Name of the offer family ('BPE','BPEA') |
Yes |
| type |
string |
Type of offer family ('OFFER_FAMILY') |
Yes |
| description |
string |
Description of the offer family |
No |
Example
{
"name": "BPE",
"type": "OFFER_FAMILY",
"description": ""
}
Eligibility Request for a Site to Multiple Offers
Creating an eligibility request to check the eligibility of an address for one or more offers.
POST /api/v1/product_offering_qualification
Request Field Parameters
| Name |
Type |
Description |
Required |
| external_id |
string |
External identifier for the request |
No |
| project_id |
string |
Associated project identifier |
No |
| product_offering_qualification_item |
array |
List of offer qualification items |
Yes |
Example
{
"external_id": "123",
"project_id": "456",
"product_offering_qualification_items": [...]
}
Details for an Offer Qualification
| Name |
Type |
Description |
Required |
| offer_families |
array |
Requested offer families |
Yes |
| eligibility_id |
string |
Eligibility identifier (from the address search API) |
Yes |
| resolve_pricing |
bool |
Retrieve articles' prices (default is no) |
No |
| address |
object |
Address details to verify |
No |
Example
"product_offering_qualification_items": [
{
"offer_families": ["BPEA","BPE"],
"eligibility_id": "{eligibility_id}",
"resolve_pricing": false,
"address": {}
}]
Address Details
| Name |
Type |
Description |
Required |
| label |
string |
Address label |
No |
| street_ext |
string |
Street extension |
No |
| street_nr |
string |
Street number |
No |
| city |
object |
City details |
No |
| street |
object |
Street details |
No |
Example
"address": {
"label": "4bis Rue Andrei Sakharov 76130 Mont-Saint-Aignan",
"street_ext": "B",
"street_nr": "4",
"city": {},
"street": {}
}
City Details
| Name |
Type |
Description |
Required |
| city_id |
string |
City identifier (from the address search API) |
No |
| insee_code |
string |
INSEE code of the city |
No |
| city_name |
string |
City name |
No |
| post_code |
string |
Postal code of the city |
No |
Example
"city": {
"city_id": "76451",
"insee_code": "76451",
"city_name": "MONT ST AIGNAN",
"post_code": "76130"
}
Street Details
| Name |
Type |
Description |
Required |
| street_id |
string |
Street identifier (from the address search API) |
No |
| street_name |
string |
Street name |
No |
Example
"street": {
"street_id": "76451055R",
"street_name": "Rue Andrei Sakharov"
}
Full request example
{
"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"
}
}
}
]
}
Response
| Name |
Type |
Description |
| id |
string |
Eligibility request identifier |
| creation_date |
string |
Creation date |
{
"id": "2eaf7b5b-384d-4cb7-8d9b-09ac712354d7",
"creation_date": "2025-04-04T10:07:24.274+02:00",
}
Retrieving Eligibility Results
Retrieving the eligibility results of an eligibility request.
GET /api/v1/product_offering_qualification/{id}
Request Field Parameters
| Name |
Type |
Description |
Required |
| id |
string |
Eligibility request identifier |
Yes |
Response
| Name |
Type |
Description |
Required |
| id |
string |
Eligibility request identifier |
Yes |
| user |
object |
The user who created the eligibility request |
Yes |
| creation_date |
string |
Request's creation date |
Yes |
| external_id |
string |
External identifier for the request |
No |
| project_id |
string |
Associated project identifier |
No |
| effective_qualification_date |
string |
Effective eligibility date |
No |
| href |
string |
Link to the resource |
No |
| state |
string |
Current state of the request |
Yes |
| state_change |
array |
State change history |
Yes |
| product_offering_qualification_item_details |
array |
List of product offering qualification items |
No |
Example
{
"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": [...]
}
User Details
| Nom |
Type |
Description |
Obligatoire |
| email |
string |
User's email adress |
Yes |
| first_name |
string |
User's first name |
Yes |
| last_name |
string |
User's last name |
Yes |
Exemple
"user": {
"email": "anonymous@example.fr",
"first_name": "Ano",
"last_name": "Nymous"
}
State Change
| Name |
Type |
Description |
Required |
| change_reason |
string |
Reason for the state change |
Yes |
| change_date |
string |
State change date |
Yes |
| state |
string |
New state |
Yes |
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"
}]
Offer Qualification Item Details
| Nom |
Type |
Description |
Obligatoire |
| id |
string |
Qualification Item's identifier |
Yes |
| user |
object |
User who made the eligibility request |
Yes |
| tarif_zone |
string |
Tarif zone |
Yes |
| offer_families |
array |
Available offer families |
Yes |
| zone_bpe |
number |
BPE Zone (ex: 1 corresponds to THD ZONE 1) |
Yes |
| zone_bpea |
number |
BPEA Zone (ex: 3 corresponds to THD ZONE 3) |
Yes |
| bandwidth_max |
float |
Max offer bandwidth |
Yes |
| place |
object |
Place details |
Yes |
| address |
object |
Adress details |
No |
| guaranteed_until_date |
string |
Offer guaranteed up until this date |
Yes |
| price |
number |
Product price |
No |
| far |
number |
FAR price |
No |
| fas |
number |
FAS price |
No |
| state |
string |
Element's current state |
Yes |
| state_change |
array |
State change history |
Yes |
| product_offering_qualification_id |
string |
Product offering qualification identifier |
Yes |
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_type_bpe": "FTTO",
"zone_type_bpea": "FTTO",
"zone_bpe": 2,
"zone_bpea": 2,
"bandwidth_max": 1000,
"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,
Place Details
| Name |
Type |
Description |
Required |
| location |
object |
Geographical coordinates |
Yes |
| building_ref |
string |
Building reference |
No |
| eligibility_id |
string |
Eligibility identifier |
Yes |
Exemple
"place": {
"location": {
"x": 1.0741197,
"y": 49.4629709
},
"building_ref": "",
"eligibility_id": "KHg6MS4wNzQxMTk3O3k6NDkuNDYyOTcwOTtiOk5vbmUp"
}
Address Details
| Name |
Type |
Description |
Required |
| label |
string |
Address label |
No |
| street_ext |
string |
Street extension |
No |
| street_nr |
string |
Street number |
No |
| city |
object |
City details |
No |
| street |
object |
Street details |
No |
Exemple
"address": {
"label": "4bis Rue Andrei Sakharov 76130 Mont-Saint-Aignan",
"street_ext": "B",
"street_nr": "4",
"city": {},
"street": {}
}
City Details
| Name |
Type |
Description |
Required |
| city_id |
string |
City identifier |
No |
| insee_code |
string |
INSEE code of the city |
No |
| city_name |
string |
City name |
No |
| post_code |
string |
Postal code of the city |
No |
Exemple
"city": {
"city_id": "76451",
"insee_code": "76451",
"city_name": "MONT ST AIGNAN",
"post_code": "76130"
}
Street Details
| Name |
Type |
Description |
Required |
| street_id |
string |
Street identifier |
No |
| street_name |
string |
Street name |
No |
Exemple
"street": {
"street_id": "76451055R",
"street_name": "Rue Andrei Sakharov"
}
Offer Details
| Name |
Type |
Description |
Required |
| product_id |
string |
Offer identifier (product_offering) |
Yes |
| name |
string |
Product name |
Yes |
| description |
string |
Product description |
Yes |
| bandwidth |
string |
Product bandwidth |
Yes |
| bandwidth_guarantee |
string |
Guaranteed Bandwidth |
Yes |
| bandwidth_max |
string |
Maximum Bandwidth |
Yes |
| commitment |
string |
Product commitment |
Yes |
| offer_technology |
string |
Offer technology |
Yes |
| offer_family |
string |
Offer family |
Yes |
| tarif_zone |
string |
Tarif zone |
Yes |
| price |
string |
Product's price |
No |
| far |
string |
FAR's price |
No |
| fas |
string |
FAS's price |
No |
| on_quotation |
boolean |
Indicates if the product is on quotation |
Yes |
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
}]
Offers list
Retrieving a list of offers.
GET /api/v1/catalog/product_offering/
Offer Details
Retrieving the details of an offer.
GET /api/v1/product_offering/{id}
Request Field Parameters
| Name |
Type |
Description |
Required |
| id |
string |
Offer identifier (product_offering) |
Yes |
| zone |
integer |
Tarif zone (from eligibility) |
No |
Response
| Name |
Type |
Description |
Required |
| id |
string |
Offer identifier |
Yes |
| href |
string |
Link to the resource |
Yes |
| name |
string |
Offer name |
Yes |
| description |
string |
Offer description |
Yes |
| bandwidthe |
string |
Product bandwidth |
Yes |
| bandwidth_guarantee |
string |
Guaranteed bandwidth |
Yes |
| bandwidth_max |
string |
Maximum bandwidth |
Yes |
| commitment |
string |
Offer commitment |
Yes |
| tarif_zone |
string |
Tarif zone |
Yes |
| far |
number |
FAR value |
Yes |
| fas |
number |
FAS value |
Yes |
| price |
number |
Offer price |
Yes |
| recurring |
boolean |
Indicates if the offer is recurring |
Yes |
| offer_family |
string |
Offer family |
Yes |
| offer_technology |
string |
Offer technology |
Yes |
| available_options |
array |
Available options for the offer |
Yes |
| last_update |
string |
Last update date |
Yes |
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"
}
Available Options Details
Exemple
{
"name": "SECURISATIONCOLLECTE",
"type": "Option",
"values": []
}
Option Values Details
| Name |
Type |
Description |
Required |
| option_id |
string |
Option identifier |
Yes |
| label |
string |
Option label |
Yes |
| price |
number |
Option price |
Yes |
| recurring |
boolean |
Indicates if the option is recurring |
Yes |
Exemple
{
"option_id": "241",
"label": "SECURISATION COLLECTE Active - Passive",
"price": 10.0,
"recurring": true
}
Request for available site connection types
Retrieving available site connection types
GET /api/v1/site_connection/
Response
| Nom |
Type |
Description |
Obligatoire |
| available_site_connection_types |
array |
List of available site connection types |
Yes |
Example
{
"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"
]
}
Eligibilites export
The eligibilites exporting process consists of three steps:
1. Starting the CSV export
POST /api/v1/product_offering_qualification_item/export/csv/
Starts the eligibilites export to the CSV format. This operation is limited to one request per user every 5 minutes.
Response
| Field |
Type |
Description |
| task_id |
string |
Export task identifier |
Example
{
"task_id": "550e8400-e29b-41d4-a716-446655440000"
}
2. Checking export state
GET /api/v1/product_offering_qualification_item/export/{task_id}/status/
Allows following the state of the export.
URL parameters
| Parameter |
Type |
Description |
| task_id |
string |
Export task identifier |
Response
| Field |
Type |
Description |
| task_id |
string |
Export task identifier |
| success |
boolean |
Task's state (null if task is still ongoing) |
| started |
datetime |
Start date |
| stopped |
datetime |
End date |
The success field in the response can have three different values:
| Value |
Description |
null |
The task is still on-going or hasn't started yet |
true |
The task succesfully concluded and the CSV file is ready |
false |
The task failed |
Response
{
"task_id": "550e8400-e29b-41d4-a716-446655440000",
"success": true,
"started": "2025-07-08T10:30:00Z",
"stopped": "2025-07-08T10:31:00Z"
}
3. Downloading the file
GET /api/v1/product_offering_qualification_item/export/{task_id}/download/
Downloads the CSV file after exporting is complete.
URL parameters
| Parameter |
Type |
Description |
| task_id |
string |
Export task identifier |
Response
The CSV file containing the exported data.
| Header |
Value |
| Content-Type |
text/csv |
Errors
| HTTP code |
Description |
| 401 |
User lacks authentication |
| 403 |
Request rejected |
| 404 |
Task or file not found |
| 429 |
Too many requests (rate limit reached) |