For partners · API v1

Product carbon footprint API

For consultants and software platforms: create a product's carbon footprint from your own system with the same engine as this site, calculated in line with ISO 14067 and exported in PACT v3 format. Keys are issued by request: hello@missionsustainability.org.

Authentication and limits

Send your key on every call: Authorization: Bearer <key>. Each key has a monthly call limit; every response carries X-RateLimit-Limit and X-RateLimit-Remaining. Keys only see the footprints they created. We store only a fingerprint of your key, so a lost key is replaced, not recovered.

Endpoints

MethodPathWhat it does
POST/api/v1/footprintsCalculate and store a footprint. Body: a simple product or a full engine input. Returns 201 with the footprint.
GET/api/v1/footprints/{id}The stored footprint, in the same form.
GET/api/v1/footprints/{id}/pactThe PACT v3.0.3 data file (JSON) for your customer's systems.
GET/api/v1/footprints/{id}/buyer-packZIP: PDF report, PACT file, assumptions and data sources.
GET/api/v1/usageThis key's calls and footprints this month, and its limit.

Two kinds of input

  • A simple product (product): name, category, materials (as on a label, for example "60% cotton, 40% polyester" or "Upper: cotton; Outsole: natural rubber"), weight_g, made_in, and optional sku and brand. It is read exactly like a row of a catalogue upload: a screening estimate, with every default written to the assumptions.
  • A full engine input (spec): materials, factory energy, packaging, transport, use and end of life, as in the full footprint form (its "Edit as JSON" view shows the format). Use it when you have the company's own data.

Full example

Request

curl -X POST https://productcarbonfootprint.ai/api/v1/footprints \
  -H "Authorization: Bearer $MFP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "product": { "name": "Organic cotton T-shirt", "sku": "TS-101", "category": "clothing", "materials": "100% organic cotton", "weight_g": 180, "made_in": "India" } }'

Response (201 Created; long lists shortened with …)

{
  "id": "fp_XXXXXXXXXXXX",
  "object": "footprint",
  "created": "2026-11-12T10:00:00.000Z",
  "kind": "product",
  "product": {
    "name": "Organic cotton T-shirt",
    "sku": "TS-101",
    "category": "clothing"
  },
  "result": {
    "total_kgco2e": 4.194774,
    "total_including_biogenic_uptake_kgco2e": 3.693363,
    "cradle_to_gate_kgco2e": 2.497337,
    "declared_unit": "piece",
    "boundary": "cradle_to_grave",
    "partial": false,
    "stages_kgco2e": {
      "raw_materials": 0.309176,
      "production": 1.984892,
      "packaging": 0.203269,
      "distribution": 0.04007,
      "use": 1.522918,
      "end_of_life": 0.134449
    },
    "uncertainty_95_kgco2e": [
      2.44,
      13.44
    ],
    "gwp": "IPCC AR6, GWP100; 93% of emissions come from factors published in AR5 or with an unstated basis (ISO 14067 allows this when no AR6 version exists)"
  },
  "data_quality": {
    "confidence": "Medium",
    "dqr": {
      "technological": 3,
      "geographical": 1.37,
      "temporal": 1,
      "overall": 1.79
    },
    "primary_data_share_pct": 0,
    "own_activity_data_pct": 0
  },
  "eco_score": {
    "band": "B",
    "vs_category_median_pct": -16.2,
    "category": "t-shirt",
    "benchmark_products": 3060,
    "method": "eco-score v1"
  },
  "standards": {
    "summary": [
      {
        "standard": "ISO 14040/14044",
        "met": 13,
        "justified": 1,
        "not_met": 0,
        "needs_reviewer": 1,
        "conforms_by_calculation": true
      },
      {
        "standard": "ISO 14067",
        "met": 21,
        "justified": 2,
        "not_met": 1,
        "needs_reviewer": 1,
        "conforms_by_calculation": false
      },
      {
        "standard": "PACT",
        "met": 14,
        "justified": 1,
        "not_met": 3,
        "needs_reviewer": 1,
        "conforms_by_calculation": false
      }
    ],
    "checks": [
      {
        "id": "goal_statement",
        "title": "The study's purpose is written down",
        "results": {
          "ISO14044": {
            "status": "met",
            "clause": "4.2.2",
            "detail": "Application, reasons and audience stated."
          },
          "ISO14067": {
            "status": "met",
            "clause": "6.3.1",
            "detail": "Application, reasons and audience stated."
          }
        }
      },
      "…"
    ]
  },
  "status_label": "Screening estimate",
  "assumptions": [
    "Screening mode: this listing gives no primary data, so every input below that is not a stated material or weight is a named screening default. The result is not PACT-conformant (primary data share 0%).",
    "…"
  ],
  "warnings": [
    "Factor Organic cotton lint, India includes land-use change that cannot be separated; land-use change is reported inside fossil GHG for this line.",
    "…"
  ],
  "sources": [
    {
      "title": "Carbon intensity of electricity (Ember via Our World in Data)",
      "publisher": "Our World in Data / Ember",
      "version": "2026 release (2025 data)",
      "licence": "CC BY 4.0",
      "share_of_footprint_pct": 83.2
    },
    {
      "title": "UK DESNZ Greenhouse gas reporting: conversion factors 2025",
      "publisher": "UK Department for Energy Security and Net Zero",
      "version": "2025 (flat file)",
      "licence": "Open Government Licence v3.0",
      "share_of_footprint_pct": 9.2
    },
    "…"
  ],
  "engine": {
    "version": "1.2.0",
    "factor_library": "2026.11-mfp.8"
  },
  "links": {
    "self": "https://productcarbonfootprint.ai/api/v1/footprints/fp_XXXXXXXXXXXX",
    "pact": "https://productcarbonfootprint.ai/api/v1/footprints/fp_XXXXXXXXXXXX/pact",
    "buyer_pack": "https://productcarbonfootprint.ai/api/v1/footprints/fp_XXXXXXXXXXXX/buyer-pack"
  }
}

Results only

Responses give totals, the breakdown by life-cycle stage, uncertainty, data quality, the eco-score, the standards checklist, assumptions and the sources with their licences. Individual emission factor values are never returned: the buyer pack's PDF leaves them out and has no calculation CSV. This is a condition of the data licences.

Errors

Every error is JSON: {"error": {"code": "...", "message": "..."}}

StatusCodeMeaning
401missing_key / invalid_keyNo key, or a key that is not valid or switched off.
404not_foundNo footprint with this id for this key (keys only see their own footprints).
413too_largeRequest body over 200 KB.
422invalid_inputThe footprint could not be calculated. problems lists every missing or invalid input; nothing is guessed.
429monthly_limitThe key has used its calls for the month.

Footprints are screening estimates or company studies, as labelled in each response; they are for business-to-business use and not for public environmental claims. See how we calculate.