The Restoration Carbon Protocol v1.0 JSON Schema is the machine-readable definition of the RCP Job Carbon Report. It specifies every field name, data type, required status, and valid value for a complete RCP emissions record. This is the document software developers, ESG platform integrators, and restoration job management platforms use to implement RCP data capture and exchange.
This schema is released as an open standard. Any platform that produces RCP-compliant JSON output can be described as RCP-compatible. No license is required. Attribution to the Restoration Carbon Protocol is encouraged.
Schema version: RCP-JCR-1.0
Conforms to: JSON Schema Draft-07 (json-schema.org/draft-07)
GHG Protocol alignment: Corporate Value Chain (Scope 3) Standard
Emission factor vintage: EPA 2025, EPA WARM v16, EPA eGRID 2023
Schema Overview
The RCP Job Carbon Report JSON object has seven top-level sections that mirror the paper report format: job identification, emissions summary, transportation data, materials data, waste data, demolished materials, and data quality metadata. All sections except data_quality are required for a complete RCP record. Partial records (missing sections) are valid as draft records but must not be delivered to clients as final RCP disclosures.
Full Schema Definition
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://tygartmedia.com/rcp/schema/v1.0/job-carbon-report.json",
"title": "RCP Job Carbon Report",
"description": "Restoration Carbon Protocol v1.0 — Per-Job Scope 3 Emissions Record",
"version": "1.0.0",
"type": "object",
"required": [
"schema_version",
"job_identification",
"emissions_summary",
"transportation",
"materials",
"waste",
"demolished_materials"
],
"properties": {
"schema_version": {
"type": "string",
"const": "RCP-JCR-1.0",
"description": "Schema version identifier. Must be 'RCP-JCR-1.0' for v1.0 records."
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "ISO 8601 timestamp of when this record was generated."
},
"job_identification": {
"type": "object",
"required": [
"contractor_name",
"job_id",
"client_name",
"property_address",
"job_type",
"damage_category",
"damage_class",
"affected_area_sqft",
"job_start_date",
"job_completion_date",
"reporting_standard",
"egrid_subregion"
],
"properties": {
"contractor_name": {
"type": "string",
"description": "Legal name of the restoration contractor performing the work."
},
"contractor_rcp_id": {
"type": "string",
"description": "Optional. RCP self-certification ID if contractor is RCP-certified."
},
"job_id": {
"type": "string",
"description": "Contractor's internal job identifier. Used to cross-reference with job management system."
},
"client_name": {
"type": "string",
"description": "Name of the property owner or manager receiving this report."
},
"property_address": {
"type": "object",
"required": ["street", "city", "state", "zip"],
"properties": {
"street": { "type": "string" },
"city": { "type": "string" },
"state": { "type": "string", "pattern": "^[A-Z]{2}$" },
"zip": { "type": "string", "pattern": "^[0-9]{5}(-[0-9]{4})?$" }
}
},
"job_type": {
"type": "string",
"enum": [
"water_damage",
"fire_smoke",
"mold_remediation",
"asbestos_hazmat",
"biohazard_trauma",
"combined"
],
"description": "Primary job type per RCP classification."
},
"damage_category": {
"type": "string",
"enum": ["1", "2", "3", "N/A"],
"description": "IICRC S500 water damage category (1=clean, 2=gray, 3=black). Use N/A for non-water jobs."
},
"damage_class": {
"type": "string",
"enum": ["1", "2", "3", "4", "N/A"],
"description": "IICRC S500 water damage class (1=minimal to 4=specialty drying). Use N/A for non-water jobs."
},
"affected_area_sqft": {
"type": "number",
"minimum": 0,
"description": "Total affected area in square feet."
},
"job_start_date": {
"type": "string",
"format": "date",
"description": "ISO 8601 date (YYYY-MM-DD) of job mobilization."
},
"job_completion_date": {
"type": "string",
"format": "date",
"description": "ISO 8601 date (YYYY-MM-DD) of job close-out."
},
"reporting_standard": {
"type": "string",
"const": "Restoration Carbon Protocol v1.0, GHG Protocol Corporate Value Chain Standard",
"description": "Must match this exact string for RCP v1.0 compliance."
},
"egrid_subregion": {
"type": "string",
"description": "EPA eGRID subregion code for the job site ZIP code. Use 'US_AVG' if subregion unknown.",
"examples": ["WECC", "SRVC", "RFCW", "US_AVG"]
}
}
},
"emissions_summary": {
"type": "object",
"required": [
"total_job_emissions_tco2e",
"category_1_materials_tco2e",
"category_4_transportation_tco2e",
"category_5_waste_tco2e",
"category_12_demolished_materials_tco2e"
],
"properties": {
"total_job_emissions_tco2e": {
"type": "number",
"minimum": 0,
"description": "Total job Scope 3 emissions in metric tons CO2 equivalent (tCO2e). Sum of all categories."
},
"category_1_materials_tco2e": {
"type": "number",
"minimum": 0,
"description": "GHG Protocol Scope 3 Category 1 — Purchased Goods and Services. Embedded carbon in consumable materials."
},
"category_4_transportation_tco2e": {
"type": "number",
"minimum": 0,
"description": "GHG Protocol Scope 3 Category 4 — Upstream Transportation. All vehicle fuel combustion for job-related trips."
},
"category_5_waste_tco2e": {
"type": "number",
"minimum": 0,
"description": "GHG Protocol Scope 3 Category 5 — Waste Generated in Operations. Disposal of materials removed from the property."
},
"category_12_demolished_materials_tco2e": {
"type": "number",
"minimum": 0,
"description": "GHG Protocol Scope 3 Category 12 — End-of-Life Treatment. Embedded carbon in building materials removed and disposed."
},
"equipment_energy_kwh": {
"type": "number",
"minimum": 0,
"description": "Optional. Total kWh consumed by contractor-deployed equipment. Included in Category 1 if equipment operates on building power; Category 4 if generator-powered."
}
}
},
"transportation": {
"type": "object",
"required": ["vehicle_trips", "calculation_method"],
"properties": {
"calculation_method": {
"type": "string",
"enum": ["primary_fuel_volume", "proxy_mileage"],
"description": "'primary_fuel_volume' = actual gallons recorded. 'proxy_mileage' = miles x fleet average mpg x emission factor."
},
"vehicle_trips": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["vehicle_type", "fuel_type", "round_trips", "round_trip_miles"],
"properties": {
"vehicle_type": {
"type": "string",
"enum": ["light_truck", "service_van", "equipment_trailer", "dump_truck", "heavy_equipment", "other"],
"description": "Vehicle category."
},
"fuel_type": {
"type": "string",
"enum": ["diesel", "gasoline", "electric", "hybrid"],
"description": "Primary fuel type."
},
"round_trips": {
"type": "integer",
"minimum": 1,
"description": "Number of complete round trips for this vehicle on this job."
},
"round_trip_miles": {
"type": "number",
"minimum": 0,
"description": "Miles per round trip."
},
"fuel_consumed_gallons": {
"type": "number",
"minimum": 0,
"description": "Optional. Actual fuel consumed in gallons. Preferred over proxy when available."
},
"emissions_kg_co2e": {
"type": "number",
"minimum": 0,
"description": "Calculated emissions for this vehicle entry in kg CO2e."
},
"trip_purpose": {
"type": "string",
"enum": ["response", "monitoring", "equipment_delivery", "equipment_pickup", "waste_haul", "crew_transport", "other"],
"description": "Primary purpose of these trips."
}
}
}
},
"total_vehicle_miles": {
"type": "number",
"minimum": 0,
"description": "Sum of all vehicle-miles across all entries."
},
"total_emissions_kg_co2e": {
"type": "number",
"minimum": 0,
"description": "Total transportation emissions in kg CO2e."
}
}
},
"materials": {
"type": "object",
"required": ["calculation_method"],
"properties": {
"calculation_method": {
"type": "string",
"enum": ["primary_purchase_records", "proxy_job_type_standard"],
"description": "'primary_purchase_records' = actual quantities from purchase records. 'proxy_job_type_standard' = RCP standard consumption rates by job type."
},
"chemicals": {
"type": "array",
"items": {
"type": "object",
"required": ["product_type", "quantity_liters"],
"properties": {
"product_type": {
"type": "string",
"enum": ["antimicrobial", "biocide", "encapsulant", "deodorizer", "wetting_agent", "other"]
},
"quantity_liters": { "type": "number", "minimum": 0 },
"emission_factor_kg_co2e_per_liter": { "type": "number" },
"emissions_kg_co2e": { "type": "number", "minimum": 0 }
}
}
},
"ppe_disposable": {
"type": "object",
"properties": {
"tyvek_suits": { "type": "integer", "minimum": 0 },
"glove_pairs": { "type": "integer", "minimum": 0 },
"respirators_n95": { "type": "integer", "minimum": 0 },
"respirators_p100_half_face": { "type": "integer", "minimum": 0 },
"boot_covers_pairs": { "type": "integer", "minimum": 0 },
"emissions_kg_co2e": { "type": "number", "minimum": 0 }
}
},
"containment_materials": {
"type": "object",
"properties": {
"poly_sheeting_meters": { "type": "number", "minimum": 0 },
"zipper_doors_units": { "type": "integer", "minimum": 0 },
"hepa_filters_replaced": { "type": "integer", "minimum": 0 },
"emissions_kg_co2e": { "type": "number", "minimum": 0 }
}
},
"replacement_materials": {
"type": "array",
"description": "Installed replacement building materials, if reconstruction is within contractor scope.",
"items": {
"type": "object",
"required": ["material_type", "quantity_kg"],
"properties": {
"material_type": {
"type": "string",
"enum": ["drywall_standard", "drywall_moisture_resistant", "insulation_fiberglass", "insulation_mineral_wool", "lumber_framing", "carpet", "lvp_flooring", "tile_ceramic", "other"]
},
"quantity_kg": { "type": "number", "minimum": 0 },
"emission_factor_kg_co2e_per_kg": { "type": "number" },
"emissions_kg_co2e": { "type": "number", "minimum": 0 }
}
}
},
"total_emissions_kg_co2e": {
"type": "number",
"minimum": 0,
"description": "Total materials emissions in kg CO2e. Sum of chemicals, PPE, containment, and replacement materials."
}
}
},
"waste": {
"type": "object",
"required": ["calculation_method", "waste_streams"],
"properties": {
"calculation_method": {
"type": "string",
"enum": ["primary_manifest_weights", "proxy_volume_conversion"],
"description": "'primary_manifest_weights' = actual weights from disposal manifests. 'proxy_volume_conversion' = volume estimates converted to weight using RCP standard densities."
},
"waste_streams": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["waste_type", "disposal_method", "quantity_short_tons"],
"properties": {
"waste_type": {
"type": "string",
"enum": ["cd_debris_mixed", "drywall_gypsum", "wood_debris", "contaminated_water", "regulated_hazmat", "biohazardous_waste", "ppe_disposable", "other"]
},
"disposal_method": {
"type": "string",
"enum": ["landfill", "recycling", "hazmat_incineration", "wastewater_municipal", "wastewater_licensed_facility", "other"]
},
"disposal_facility": {
"type": "string",
"description": "Optional. Name or identifier of disposal facility."
},
"quantity_short_tons": {
"type": "number",
"minimum": 0,
"description": "Weight of waste in US short tons."
},
"haul_miles_one_way": {
"type": "number",
"minimum": 0,
"description": "Optional. One-way distance to disposal facility in miles. Used to calculate haul transport emissions."
},
"emission_factor_tco2e_per_short_ton": { "type": "number" },
"emissions_kg_co2e": { "type": "number", "minimum": 0 }
}
}
},
"total_emissions_kg_co2e": {
"type": "number",
"minimum": 0,
"description": "Total waste disposal emissions in kg CO2e."
}
}
},
"demolished_materials": {
"type": "object",
"required": ["calculation_method"],
"properties": {
"calculation_method": {
"type": "string",
"enum": ["primary_demolition_records", "proxy_affected_area"],
"description": "'primary_demolition_records' = actual weights from demolition scope. 'proxy_affected_area' = RCP standard weight-per-sqft by material type."
},
"materials_removed": {
"type": "array",
"items": {
"type": "object",
"required": ["material_type", "quantity_kg"],
"properties": {
"material_type": {
"type": "string",
"enum": ["drywall_standard", "drywall_moisture_resistant", "insulation_fiberglass", "insulation_mineral_wool", "lumber_framing", "carpet", "lvp_flooring", "tile_ceramic", "concrete", "other"]
},
"quantity_kg": { "type": "number", "minimum": 0 },
"emission_factor_kg_co2e_per_kg": { "type": "number" },
"emissions_kg_co2e": { "type": "number", "minimum": 0 }
}
}
},
"total_emissions_kg_co2e": {
"type": "number",
"minimum": 0,
"description": "Total demolished materials emissions in kg CO2e."
}
}
},
"data_quality": {
"type": "object",
"description": "Optional but strongly recommended. Documents data sources and proxy usage for audit purposes.",
"properties": {
"preparer_name": { "type": "string" },
"preparer_date": { "type": "string", "format": "date" },
"primary_data_points": {
"type": "array",
"description": "List of data points captured from primary sources.",
"items": {
"type": "string",
"enum": [
"vehicle_mileage_gps",
"vehicle_mileage_odometer",
"fuel_consumed_recorded",
"equipment_kwh_metered",
"waste_weight_manifest",
"materials_purchase_records",
"demolition_scope_documented"
]
}
},
"proxy_data_points": {
"type": "array",
"description": "List of data points estimated using RCP proxy values.",
"items": {
"type": "string",
"enum": [
"vehicle_mileage_estimated",
"fuel_consumed_proxy_mpg",
"equipment_kwh_proxy_wattage",
"waste_weight_estimated",
"ppe_consumption_standard_rate",
"materials_proxy_sqft"
]
}
},
"notes": {
"type": "string",
"description": "Free-text field for data quality notes, exceptions, or unusual circumstances."
}
}
}
}
}
Minimal Valid Record Example
The following is the smallest valid RCP-JCR-1.0 JSON object — all required fields populated, optional fields omitted. This represents a simple water damage job with proxy-based calculations:
{
"schema_version": "RCP-JCR-1.0",
"generated_at": "2026-04-11T09:00:00Z",
"job_identification": {
"contractor_name": "Acme Restoration LLC",
"job_id": "JOB-2026-04847",
"client_name": "Westfield Properties Inc.",
"property_address": {
"street": "1200 Commerce Blvd",
"city": "Sacramento",
"state": "CA",
"zip": "95814"
},
"job_type": "water_damage",
"damage_category": "2",
"damage_class": "3",
"affected_area_sqft": 2400,
"job_start_date": "2026-03-14",
"job_completion_date": "2026-03-22",
"reporting_standard": "Restoration Carbon Protocol v1.0, GHG Protocol Corporate Value Chain Standard",
"egrid_subregion": "WECC"
},
"emissions_summary": {
"total_job_emissions_tco2e": 1.84,
"category_1_materials_tco2e": 0.09,
"category_4_transportation_tco2e": 0.89,
"category_5_waste_tco2e": 0.70,
"category_12_demolished_materials_tco2e": 0.16
},
"transportation": {
"calculation_method": "proxy_mileage",
"vehicle_trips": [
{
"vehicle_type": "light_truck",
"fuel_type": "diesel",
"round_trips": 4,
"round_trip_miles": 47,
"emissions_kg_co2e": 189,
"trip_purpose": "response"
},
{
"vehicle_type": "equipment_trailer",
"fuel_type": "diesel",
"round_trips": 2,
"round_trip_miles": 47,
"emissions_kg_co2e": 151,
"trip_purpose": "equipment_delivery"
},
{
"vehicle_type": "dump_truck",
"fuel_type": "diesel",
"round_trips": 1,
"round_trip_miles": 22,
"emissions_kg_co2e": 50,
"trip_purpose": "waste_haul"
}
],
"total_vehicle_miles": 470,
"total_emissions_kg_co2e": 390
},
"materials": {
"calculation_method": "proxy_job_type_standard",
"chemicals": [
{
"product_type": "antimicrobial",
"quantity_liters": 12,
"emission_factor_kg_co2e_per_liter": 2.8,
"emissions_kg_co2e": 33.6
}
],
"ppe_disposable": {
"tyvek_suits": 18,
"glove_pairs": 36,
"respirators_n95": 24,
"emissions_kg_co2e": 45
},
"containment_materials": {
"poly_sheeting_meters": 40,
"emissions_kg_co2e": 9
},
"total_emissions_kg_co2e": 87.6
},
"waste": {
"calculation_method": "primary_manifest_weights",
"waste_streams": [
{
"waste_type": "cd_debris_mixed",
"disposal_method": "landfill",
"disposal_facility": "Sacramento County Transfer Station",
"quantity_short_tons": 1.8,
"haul_miles_one_way": 11,
"emission_factor_tco2e_per_short_ton": 0.021,
"emissions_kg_co2e": 37.8
}
],
"total_emissions_kg_co2e": 37.8
},
"demolished_materials": {
"calculation_method": "primary_demolition_records",
"materials_removed": [
{
"material_type": "drywall_standard",
"quantity_kg": 900,
"emission_factor_kg_co2e_per_kg": 0.12,
"emissions_kg_co2e": 108
},
{
"material_type": "carpet",
"quantity_kg": 180,
"emission_factor_kg_co2e_per_kg": 5.40,
"emissions_kg_co2e": 972
}
],
"total_emissions_kg_co2e": 1080
},
"data_quality": {
"preparer_name": "Jane Smith, Operations Manager",
"preparer_date": "2026-03-22",
"primary_data_points": ["waste_weight_manifest", "materials_purchase_records"],
"proxy_data_points": ["vehicle_mileage_estimated", "ppe_consumption_standard_rate"],
"notes": "Vehicle mileage estimated from dispatch address records. PPE consumption from standard Cat 2, Class 3 rate table."
}
}
Emission Factors Referenced in This Schema
All emission factors used in RCP-JCR-1.0 calculations are drawn from the RCP Emission Factor Reference Table. The authoritative source for each factor is documented there. The key factors for software implementations:
- Grid electricity (US national average): 0.3499 kg CO₂e/kWh — EPA eGRID 2023
- Diesel fuel (mobile combustion): 10.21 kg CO₂e/gallon — EPA 2025 EF Hub
- Gasoline (mobile combustion): 8.89 kg CO₂e/gallon — EPA 2025 EF Hub
- Mixed C&D waste, landfill: 0.021 tCO₂e/short ton — EPA WARM v16
- Drywall production: 0.12 kg CO₂e/kg — EPA WARM v16
- Carpet (nylon): 5.40 kg CO₂e/kg — DEFRA 2024
Implementation Notes for Software Developers
Several implementation patterns are worth noting for platforms building RCP compatibility:
Field nullability: Optional fields should be omitted entirely when no data is available, not set to null or 0. A missing field is distinguishable from a zero-value field, which matters for audit purposes.
Calculation_method flags: The calculation_method field in each section is required because it tells the receiving system and verifier whether to trust the numbers at primary-data quality or proxy quality. ESG platforms that ingest RCP JSON should surface this distinction to their users.
Unit consistency: All emissions totals in emissions_summary are in metric tons CO₂e (tCO₂e). All emissions in sub-sections are in kilograms CO₂e (kg CO₂e). The conversion is 1 tCO₂e = 1,000 kg CO₂e. Software implementations should validate unit consistency at write time.
eGRID subregion codes: The canonical list of eGRID subregion codes is available from EPA at epa.gov/egrid. The US_AVG code is an RCP extension for cases where the subregion is unknown — it instructs consuming systems to apply the national average factor (0.3499 kg CO₂e/kWh).
Schema validation: Implementations should validate records against this schema before transmission. Invalid records — missing required fields, wrong data types, enum violations — must not be transmitted as final RCP disclosures.
Versioning and Backwards Compatibility
The schema_version field is used by consuming systems to identify which version of the RCP schema a record was produced under. RCP v2.0 will introduce a new schema version string and may add fields not present in v1.0. All v1.0 records remain valid and will be processed by systems that implement backwards compatibility for RCP-JCR-1.0. No fields will be removed between minor versions; only additions are permitted.
The current schema is published at: tygartmedia.com/rcp/schema/v1.0/job-carbon-report.json
Sources and References