Skip to content

Declared FEC — all products (list)

List, filter, sort and paginate the declared French Environmental Cost (FEC) for all your brand products in a single call — the bulk equivalent of the single-product GET /declared-french-environmental-cost/... endpoints. Same data, filters and sorts as the My products page of the portal.

List declared French environmental cost

Request

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 with PATCH) is visible on GET /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 and governmentPlatformPublicationDate as null, and the boolean flag as false (or null when no declaration record exists at all). To retrieve only declared products, add isFrenchEnvironmentalCostPublishedToGovernmentPlatform=true. Published values are the snapshot submitted at declaration time — they can differ from a freshly recalculated score.

Filtering

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 shapeFieldsQuery encodingExample
Free-textsearch (matches product name / id / reference / collection)search=<text>search=zipped
Text any-ofproductName, productRef, colorCode, brandProductUniqueIdentifier, productCategories, collections, purchaseOrder, materials, componentCategories, productCertifications, ecoModulation, productStatus, marketSegment, gtins, productPublicName{FR,IT,EN,ES}, declaredProductSupplier{Ref,Name}, declaredComponentsSuppliers{Ref,Name}, frenchEnvironmentalCostCustomerSettingsEditedByrepeat the param, or field[]=a&field[]=bcollections=25W&collections=26W
Boolean any-ofisProductInAGECScope, isProductAGECCompliant, isProductConcernedByFrenchMethodology, isFrenchEnvironmentalCostPublishedToGovernmentPlatformrepeat the param; true / falseisFrenchEnvironmentalCostPublishedToGovernmentPlatform=true
UUID any-ofbrandProductId (Fairly Made product ids), supplierIds (products associated to these suppliers; capped list size)repeat with UUID valuesbrandProductId=<uuid>&brandProductId=<uuid>
Numeric comparisonsee Numeric fields belowfield[op]=value, op ∈ eq, neq, gt, gte, lt, ltepublishedFrenchEnvironmentalCost[gte]=200
Numeric rangesame fieldsfield[min]=…&field[max]=… (both bounds required)weight[min]=100&weight[max]=500
Date issee Date fields belowfield=<ISO 8601 date>governmentPlatformPublicationDate=2026-01-01
Date betweensame fieldsfield[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.

Sorting

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.

Query
offsetinteger, >= 0

Zero-based index of the first row to return. Default 0; must be >= 0.

Default:0
limitinteger, [ 1 .. 100 ]

Maximum number of rows to return per page. Default 20; must be > 0, max 100.

Default:20
searchstring

Free-text search over product name, id, reference and collection.

sortBystring

Field to sort by (default createdAt). Accepts any sortable key — see the Sorting section in the description. Sorting is allowed on fields the response does not return.

Default:"createdAt"
orderBystring

Sort direction. null values always sort last, in both directions.

Default:"asc"
Enum:"asc""desc"
brandProductIdArray of strings, (uuid)

Fairly Made product id (UUID v4). Repeatable to narrow to several products; pass a single id to target one product.

brandProductUniqueIdentifierArray of strings

Your brand product uniqueIdentifier (same value as on POST /brand-products). Repeatable; pass a single value to target one product by client reference.

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'

Responses

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.

Bodyapplication/json
dataArray of objects(DeclaredFrenchEnvironmentalCostListItem)required
offsetintegerrequired

Zero-based index of the first row returned.

limitintegerrequired

Maximum number of rows returned in this page.

totalintegerrequired

Total number of products matching the query — the full match count, independent of the page requested.

Response
{ "data": [ { … }, { … } ], "offset": 0, "limit": 20, "total": 1451 }