Skip to content

Resources

Categories

Every Categories endpoint, with the scope it enforces, the body it takes, a response you can read, and the refusals it can return.

List product categories.

get/categories
Scope
No credential required
Idempotency-Key
Not accepted
Returns
200
Request
curl "https://passportcraft.com/api/v1/categories"
Response · 200
{
  "object": "list",
  "data": [
    {
      "object": "category",
      "id": "general",
      "name": "categories/general",
      "display_name": "General Product",
      "schema_version": "1.0.0-draft",
      "field_count": 28
    },
    {
      "object": "category",
      "id": "textile",
      "name": "categories/textile",
      "display_name": "Textile / Apparel",
      "schema_version": "1.0.0-draft",
      "field_count": 51
    },
    {
      "object": "category",
      "id": "battery",
      "name": "categories/battery",
      "display_name": "Battery",
      "schema_version": "1.0.0-draft",
      "field_count": 93
    }
  ],
  "has_more": false,
  "next_cursor": null
}

GET /categories

Fetch a category field schema.

get/categories/{category}/schema
Scope
No credential required
Idempotency-Key
Not accepted
Returns
200

Path parameters

categorystringRequired

A category id, as returned by the category list.

Errors

Every refusal this endpoint can return, with the status it arrives with.

Request
curl "https://passportcraft.com/api/v1/categories/battery/schema"
Response · 200
{
  "object": "category_schema",
  "id": "battery",
  "name": "categories/battery/schema",
  "category": "battery",
  "display_name": "Battery",
  "schema_version": "1.0.0-draft",
  "field_groups": [
    {
      "object": "field_group",
      "id": "identification",
      "label": "Product Identification",
      "description": "Core identifiers and descriptors for the product"
    },
    {
      "object": "field_group",
      "id": "manufacturer",
      "label": "Manufacturer / Economic Operator",
      "description": "Details of the manufacturer or EU responsible person"
    },
    {
      "object": "field_group",
      "id": "sustainability",
      "label": "Environmental Data",
      "description": "Carbon footprint and material recycling data"
    },
    {
      "object": "field_group",
      "id": "compliance",
      "label": "Regulatory Compliance",
      "description": "Substances of concern and conformity declarations"
    },
    {
      "object": "field_group",
      "id": "end_of_life",
      "label": "End of Life",
      "description": "Recycling and disposal guidance for the product"
    },
    {
      "object": "field_group",
      "id": "circular_economy",
      "label": "Circular Economy",
      "description": "Recyclability, disassembly, and end-of-life information"
    },
    {
      "object": "field_group",
      "id": "identifiers_product",
      "label": "Battery Identification & Product Data",
      "description": "These you'll know from your own product and paperwork — your model name, where it's made, your warranty, and the IDs your manufacturer gives you."
    },
    {
      "object": "field_group",
      "id": "labels_conformity",
      "label": "Labels, Symbols & Conformity",
      "description": "These are the warning symbols, label text, and conformity documents (like your EU Declaration of Conformity) you put together for the EU market."
    },
    {
      "object": "field_group",
      "id": "carbon_footprint",
      "label": "Carbon Footprint",
      "description": "You don't measure these yourself — they come from your cell supplier or an LCA (life-cycle assessment) vendor, and aren't required until carbon-footprint rules phase in around 2028."
    },
    {
      "object": "field_group",
      "id": "due_diligence",
      "label": "Supply-Chain Due Diligence",
      "description": "This is your responsible-sourcing reporting — it comes from your supply-chain team or a third-party scheme, isn't required until 18 August 2027, and companies under €40M turnover are exempt."
    },
    {
      "object": "field_group",
      "id": "materials",
      "label": "Materials & Composition",
      "description": "These describe what's inside the battery — your cell supplier's datasheet and safety documents are where the chemistry, materials, and hazardous-substance details come from."
    },
    {
      "object": "field_group",
      "id": "circularity",
      "label": "Circularity & Resource Efficiency",
      "description": "These cover repair, recycling, and end-of-life. The dismantling and spare-parts links are yours to provide, and so are the waste-battery safety instructions. The recycled-content shares come from your cell supplier and aren't required until around 2028 — the renewable content share is separate, so add that as soon as your supplier sends it."
    },
    {
      "object": "field_group",
      "id": "performance",
      "label": "Performance & Durability",
      "description": "These are the deep technical specs — copy them straight off your cell supplier's datasheet; they're the supplier's numbers to provide, not measurements you take."
    }
  ],
  "fields": [
    {
      "object": "field",
      "name": "battery_model_identifier",
      "type": "text",
      "required": true,
      "access_tier": "public",
      "group": "identifiers_product",
      "label": "Battery model identifier",
      "description": "Enter the model name or number you use to identify this battery.",
      "placeholder": "BP-48100-LFP",
      "regulatory_basis": [
        {
          "regulation": "Batteries Reg (EU) 2023/1542",
          "reference": "Annex XIII(1)(a) -> Annex VI Part A(2)",
          "status": "applies_later",
          "applies_when": "LMT, industrial >2 kWh and EV batteries placed on the market or put into service from 18 Feb 2027 (Art. 77(1))",
          "note": "Annex VI Part A(2) requires the battery category and information identifying the battery; Art. 38(6) requires model identification and the batch or serial number, or product number, on the battery itself."
        }
      ]
    },
    {
      "object": "field",
      "name": "product_name",
      "type": "text",
      "required": true,
      "access_tier": "public",
      "group": "identification",
      "label": "Product Name",
      "description": "Commercial name of the product",
      "hint": "Shown as the headline on the public passport and in search.",
      "requirement": "required",
      "functional_basis": "Record identity — the passport cannot identify its product without a name.",
      "regulatory_basis": [
        {
          "regulation": "ESPR (Reg (EU) 2024/1781)",
          "reference": "Annex III(a)",
          "status": "anticipated",
          "note": "Product identifier/name — DA-gated for textiles."
        }
      ]
    },
    {
      "object": "field",
      "name": "recyclable_content_percentage",
      "type": "number",
      "required": false,
      "access_tier": "public",
      "group": "sustainability",
      "label": "Recyclable Content (%)",
      "description": "Percentage of the product that is recyclable at end of life",
      "min": 0,
      "max": 100
    },
    {
      "object": "field",
      "name": "conformity_declaration_url",
      "type": "url",
      "required": false,
      "access_tier": "authority",
      "group": "compliance",
      "label": "Declaration of Conformity URL",
      "description": "Link to the EU Declaration of Conformity document, or upload the PDF.",
      "document_types": [
        "conformity_declaration"
      ],
      "document_id_key": "conformity_declaration_url__document_id"
    },
    {
      "object": "field",
      "name": "substances_of_concern",
      "type": "array",
      "required": true,
      "access_tier": "public",
      "group": "compliance",
      "label": "Substances of Concern",
      "description": "List of substances of concern present above threshold concentrations, or \"none declared\"",
      "item_type": "string",
      "requirement": "required",
      "regulatory_basis": [
        {
          "regulation": "REACH (Reg (EC) 1907/2006)",
          "reference": "Art. 33",
          "status": "in_force",
          "note": "Communicate SVHCs > 0.1% w/w per article."
        },
        {
          "regulation": "SCIP / WFD (Dir 2008/98/EC)",
          "reference": "Art. 9(1)(i)",
          "status": "in_force",
          "note": "SCIP notification; repeal proposed (Environmental Omnibus COM(2025) 986) — re-check quarterly.",
          "status_changing": true
        },
        {
          "regulation": "ESPR (Reg (EU) 2024/1781)",
          "reference": "Art. 7(5)",
          "status": "anticipated"
        }
      ]
    },
    {
      "object": "field",
      "name": "initial_round_trip_energy_efficiency",
      "type": "number",
      "required": true,
      "required_when": {
        "field": "battery_category",
        "one_of": [
          "ev",
          "lmt"
        ]
      },
      "access_tier": "public",
      "group": "performance",
      "label": "Initial round trip energy efficiency",
      "description": "Copy the round-trip energy efficiency at the start of life from your cell supplier's datasheet.",
      "placeholder": "96",
      "hint": "Listed as round-trip efficiency or RTE, as a percentage.",
      "unit": "%",
      "min": 0,
      "max": 100,
      "regulatory_basis": [
        {
          "regulation": "Batteries Reg (EU) 2023/1542",
          "reference": "Annex XIII(1)(n)",
          "status": "applies_later",
          "applies_when": "LMT, industrial >2 kWh and EV batteries placed on the market or put into service from 18 Feb 2027 (Art. 77(1))",
          "note": "Annex XIII(1)(n): initial round trip energy efficiency and at 50 % of cycle-life. Defined at Annex IV, definition (6); parameterised at Annex IV Part A(4)."
        }
      ]
    }
  ]
}

GET /categories/battery/schema

Categories — PassportCraft API | PassportCraft