Returns, in one paginated call, the declared French environmental cost (FEC — affichage environnemental / Ecobalyse) across your products, with the same filters and sorts as the My Products page of the Fairly Made portal.
This is the collection counterpart to the single-product read GET /declared-french-environmental-cost/{brandProductId}.
Freshness — a product appears in this list up to 20 minutes after it is created or updated. This list is served from an analytics store refreshed every 20 minutes, whereas the single-product endpoints are served from the live store and answer instantly. So a product just created with
POST /brand-products(or changed withPATCH) is visible onGET /declared-french-environmental-cost/{brandProductId}immediately, but on this list only at the next refresh. This is expected behavior — treat the 20 minutes as an upper bound. For a just-written product, verify with the single-product read (authoritative immediately) rather than polling this list; for a full catalogue sync, schedule it (hourly, nightly) rather than triggering it right after a write.
Because the list and the My Products page read the same store, a given filter returns the same products and the same total in both.
Requires a Customer API bearer token (Authorization: Bearer <token>). All results are scoped to the brand the token belongs to; there is no way to read another brand's data.
The list returns every matching product, declared or not. A product without a declaration returns the
published*fields andgovernmentPlatformPublicationDateasnull, and the boolean flag asfalse(ornullwhen no declaration record exists at all). To retrieve only declared products, addisFrenchEnvironmentalCostPublishedToGovernmentPlatform=true. Published values are the snapshot submitted at declaration time — they can differ from a freshly recalculated score.
All filters are optional query parameters. Combination rule: OR within a field, AND across fields — repeating a parameter widens that filter, adding another parameter narrows the result. The operator syntax depends only on the field's type. The Query parameters box below lists the pagination/sort controls and the id filters; the table here is the full filter reference.
| Filter shape | Fields | Query encoding | Example |
|---|---|---|---|
| Free-text | search (matches product name / id / reference / collection) | search=<text> | search=zipped |
| Text any-of | productName, productRef, colorCode, brandProductUniqueIdentifier, productCategories, collections, purchaseOrder, materials, componentCategories, productCertifications, ecoModulation, productStatus, marketSegment, gtins, productPublicName{FR,IT,EN,ES}, declaredProductSupplier{Ref,Name}, declaredComponentsSuppliers{Ref,Name}, frenchEnvironmentalCostCustomerSettingsEditedBy | repeat the param, or field[]=a&field[]=b | collections=25W&collections=26W |
| Boolean any-of | isProductInAGECScope, isProductAGECCompliant, isProductConcernedByFrenchMethodology, isFrenchEnvironmentalCostPublishedToGovernmentPlatform | repeat the param; true / false | isFrenchEnvironmentalCostPublishedToGovernmentPlatform=true |
| UUID any-of | brandProductId (Fairly Made product ids), supplierIds (products associated to these suppliers; capped list size) | repeat with UUID values | brandProductId=<uuid>&brandProductId=<uuid> |
| Numeric comparison | see Numeric fields below | field[op]=value, op ∈ eq, neq, gt, gte, lt, lte | publishedFrenchEnvironmentalCost[gte]=200 |
| Numeric range | same fields | field[min]=…&field[max]=… (both bounds required) | weight[min]=100&weight[max]=500 |
| Date is | see Date fields below | field=<ISO 8601 date> | governmentPlatformPublicationDate=2026-01-01 |
| Date between | same fields | field[start]=…&field[end]=… (open bound allowed: either one alone) | governmentPlatformPublicationDate[start]=2026-01-01&governmentPlatformPublicationDate[end]=2026-03-01 |
One shape at a time per field — a numeric field takes either a comparison or a range (never both); a date field takes either an exact value or a [start]/[end] range (never both).
Numeric fields — Composition / quantities: weight, numberOfComponents, numberOfMaterials, producedQuantity, microplasticsPercentage, recycledMaterialsPercentage. Durability / service: adjustedServiceDuration, bonusMalusServiceDuration, durabilityCoefficient, deadstock, microfibers, outOfEuropeExport, promotionToRepairIndicator, rangeOfProductsIndicator, referenceServiceDuration. Scores / price: productScore, lcaScore, pefSingleScore, traceabilityScore, productPrice. FEC: lastCalculatedFrenchEnvironmentalCost, lastCalculatedFrenchEnvironmentalCostPer100grams, publishedFrenchEnvironmentalCost, publishedFrenchEnvironmentalCostPer100grams. LCA impact indicators — each exists as …FR and …PEF (e.g. climateChangeFR / climateChangePEF): acidification, climateChange, eutrophicationFreshwater, eutrophicationMarine, eutrophicationTerrestrial, ecotoxicityFreshwater, particulateMatter, humanToxicityNonCancer, humanToxicityCancer, ionisingRadiationHumanHealth, landUse, waterUse, ozoneDepletion, photochemicalOzoneFormationHumanHealth, resourceUseFossils, resourceUseMineralsAndMetals — plus FR-only climateChangeFossilFR, climateChangeBiogenicFR, climateChangeLandUseFR.
Date fields — governmentPlatformPublicationDate, agecClaimsAndComplianceCalculatedAt, lastCalculatedFrenchEnvironmentalCostComputationDate, frenchEnvironmentalCostCustomerSettingsEditedAt, lastLCAUpdate, traceabilityStartDate, theoreticalTraceabilityEndDate.
sortBy=<field> (default createdAt) with orderBy=asc|desc (default asc). null values always sort last, in both directions; text keys sort case-insensitively. Sorting and filtering are allowed on fields the response does not return (for example sortBy=productScore works even though the score is not in the payload). Sortable keys include createdAt plus every text, numeric and date field listed under Filtering.
- Mock serverhttps://doc.api.fairlymade.com/_mock/swagger-fairlymadeapi-v3/declared-french-environmental-cost
- Productionhttps://api.fairlymade.com/v3/declared-french-environmental-cost
- Sandboxhttps://api.sandbox.fairlymade.com/v3/declared-french-environmental-cost
curl -i -X GET \
'https://doc.api.fairlymade.com/_mock/swagger-fairlymadeapi-v3/declared-french-environmental-cost?offset=0&limit=20&search=string&sortBy=createdAt&orderBy=asc&brandProductId=497f6eca-6276-4993-bfeb-53cbbbba6f08&brandProductUniqueIdentifier=string'Paginated list of products with their declared FEC. A valid request with no match returns 200 with data: [] and total: 0. There is no 404 or 403 — a product that does not exist or does not belong to your brand is simply absent from the result set.
{ "data": [ { … }, { … } ], "offset": 0, "limit": 20, "total": 1451 }