curl --request GET \
--url https://{subdomain}.variable.global/api/pact/3/footprints \
--header 'Authorization: Bearer <token>'import requests
url = "https://{subdomain}.variable.global/api/pact/3/footprints"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{subdomain}.variable.global/api/pact/3/footprints', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{subdomain}.variable.global/api/pact/3/footprints",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{subdomain}.variable.global/api/pact/3/footprints"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{subdomain}.variable.global/api/pact/3/footprints")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{subdomain}.variable.global/api/pact/3/footprints")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "3f2b8c1e-5d4a-4f6b-9c2e-7a1d0e8b4c55",
"specVersion": "3.0.0",
"status": "Active",
"companyName": "Acme Corp",
"companyIds": [
"urn:uuid:9b1c2d3e-4f5a-4b6c-8d7e-0f1a2b3c4d5e"
],
"productIds": [
"urn:uuid:6f8d6c41-6a3c-4c3e-9a51-0b5c4f1e2d7a"
],
"productNameCompany": "Green Widget",
"productDescription": "A sustainable widget made from recycled materials",
"pcf": {
"declaredUnitOfMeasurement": "liter",
"declaredUnitAmount": "1234.5678",
"productMassPerDeclaredUnit": "1234.5678",
"pcfExcludingBiogenicUptake": "1234.5678",
"pcfIncludingBiogenicUptake": "1234.5678",
"fossilGhgEmissions": "1234.5678",
"fossilCarbonContent": "1234.5678",
"packagingEmissionsIncluded": true,
"ipccCharacterizationFactors": [
"AR6"
],
"crossSectoralStandards": [
"ISO14067"
],
"referencePeriodStart": "2025-01-01T00:00:00.000Z",
"referencePeriodEnd": "2025-01-01T00:00:00.000Z",
"exemptedEmissionsPercent": "1234.5678",
"primaryDataShare": "1234.5678",
"biogenicCarbonContent": "1234.5678",
"recycledCarbonContent": "1234.5678",
"landUseChangeGhgEmissions": "1234.5678",
"landManagementFossilGhgEmissions": "1234.5678",
"landManagementBiogenicCO2Emissions": "1234.5678",
"landManagementBiogenicCO2Removals": "1234.5678",
"biogenicCO2Uptake": "1234.5678",
"biogenicNonCO2Emissions": "1234.5678",
"landAreaOccupation": "1234.5678",
"aircraftGhgEmissions": "1234.5678",
"packagingGhgEmissions": "1234.5678",
"packagingBiogenicCarbonContent": "1234.5678",
"outboundLogisticsGhgEmissions": "1234.5678",
"ccsTechnologicalCO2CaptureIncluded": true,
"ccsTechnologicalCO2Capture": "1234.5678",
"technologicalCO2CaptureOrigin": "<string>",
"technologicalCO2Removals": "1234.5678",
"ccuCarbonContent": "1234.5678",
"ccuCalculationApproach": "Cut-off",
"ccuCreditCertification": "<string>",
"productOrSectorSpecificRules": [
{
"operator": "PEF",
"ruleNames": [
"EN 15804+A2"
]
}
],
"boundaryProcessesDescription": "<string>",
"geographyCountrySubdivision": "US-PA",
"geographyCountry": "NO",
"geographyRegionOrSubregion": "Europe",
"secondaryEmissionFactorSources": [
{
"name": "ecoinvent",
"version": "3.9.1"
}
],
"exemptedEmissionsDescription": "<string>",
"allocationRulesDescription": "<string>",
"dqi": {
"technologicalDQR": "1234.5678",
"temporalDQR": "1234.5678",
"geographicalDQR": "1234.5678"
},
"verification": {
"coverage": "PCF calculation model",
"providerName": "<string>",
"completedAt": "2025-01-01T00:00:00.000Z",
"standardName": "<string>",
"comments": "<string>"
}
},
"created": "2025-01-01T00:00:00.000Z",
"precedingPfIds": [
"<string>"
],
"validityPeriodStart": "2025-01-01T00:00:00.000Z",
"validityPeriodEnd": "2025-01-01T00:00:00.000Z",
"productClassifications": [
"urn:cpc:4299"
],
"comment": "<string>",
"extensions": [
{
"specVersion": "<string>",
"dataSchema": "<string>",
"documentation": "<string>",
"data": {}
}
],
"updated": "2025-01-01T00:00:00.000Z"
}
]
}{
"message": "token expired",
"code": "TokenExpired"
}{
"message": "token expired",
"code": "TokenExpired"
}PACT v3 footprints
List your footprints on PACT v3.
curl --request GET \
--url https://{subdomain}.variable.global/api/pact/3/footprints \
--header 'Authorization: Bearer <token>'import requests
url = "https://{subdomain}.variable.global/api/pact/3/footprints"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{subdomain}.variable.global/api/pact/3/footprints', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{subdomain}.variable.global/api/pact/3/footprints",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{subdomain}.variable.global/api/pact/3/footprints"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{subdomain}.variable.global/api/pact/3/footprints")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{subdomain}.variable.global/api/pact/3/footprints")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "3f2b8c1e-5d4a-4f6b-9c2e-7a1d0e8b4c55",
"specVersion": "3.0.0",
"status": "Active",
"companyName": "Acme Corp",
"companyIds": [
"urn:uuid:9b1c2d3e-4f5a-4b6c-8d7e-0f1a2b3c4d5e"
],
"productIds": [
"urn:uuid:6f8d6c41-6a3c-4c3e-9a51-0b5c4f1e2d7a"
],
"productNameCompany": "Green Widget",
"productDescription": "A sustainable widget made from recycled materials",
"pcf": {
"declaredUnitOfMeasurement": "liter",
"declaredUnitAmount": "1234.5678",
"productMassPerDeclaredUnit": "1234.5678",
"pcfExcludingBiogenicUptake": "1234.5678",
"pcfIncludingBiogenicUptake": "1234.5678",
"fossilGhgEmissions": "1234.5678",
"fossilCarbonContent": "1234.5678",
"packagingEmissionsIncluded": true,
"ipccCharacterizationFactors": [
"AR6"
],
"crossSectoralStandards": [
"ISO14067"
],
"referencePeriodStart": "2025-01-01T00:00:00.000Z",
"referencePeriodEnd": "2025-01-01T00:00:00.000Z",
"exemptedEmissionsPercent": "1234.5678",
"primaryDataShare": "1234.5678",
"biogenicCarbonContent": "1234.5678",
"recycledCarbonContent": "1234.5678",
"landUseChangeGhgEmissions": "1234.5678",
"landManagementFossilGhgEmissions": "1234.5678",
"landManagementBiogenicCO2Emissions": "1234.5678",
"landManagementBiogenicCO2Removals": "1234.5678",
"biogenicCO2Uptake": "1234.5678",
"biogenicNonCO2Emissions": "1234.5678",
"landAreaOccupation": "1234.5678",
"aircraftGhgEmissions": "1234.5678",
"packagingGhgEmissions": "1234.5678",
"packagingBiogenicCarbonContent": "1234.5678",
"outboundLogisticsGhgEmissions": "1234.5678",
"ccsTechnologicalCO2CaptureIncluded": true,
"ccsTechnologicalCO2Capture": "1234.5678",
"technologicalCO2CaptureOrigin": "<string>",
"technologicalCO2Removals": "1234.5678",
"ccuCarbonContent": "1234.5678",
"ccuCalculationApproach": "Cut-off",
"ccuCreditCertification": "<string>",
"productOrSectorSpecificRules": [
{
"operator": "PEF",
"ruleNames": [
"EN 15804+A2"
]
}
],
"boundaryProcessesDescription": "<string>",
"geographyCountrySubdivision": "US-PA",
"geographyCountry": "NO",
"geographyRegionOrSubregion": "Europe",
"secondaryEmissionFactorSources": [
{
"name": "ecoinvent",
"version": "3.9.1"
}
],
"exemptedEmissionsDescription": "<string>",
"allocationRulesDescription": "<string>",
"dqi": {
"technologicalDQR": "1234.5678",
"temporalDQR": "1234.5678",
"geographicalDQR": "1234.5678"
},
"verification": {
"coverage": "PCF calculation model",
"providerName": "<string>",
"completedAt": "2025-01-01T00:00:00.000Z",
"standardName": "<string>",
"comments": "<string>"
}
},
"created": "2025-01-01T00:00:00.000Z",
"precedingPfIds": [
"<string>"
],
"validityPeriodStart": "2025-01-01T00:00:00.000Z",
"validityPeriodEnd": "2025-01-01T00:00:00.000Z",
"productClassifications": [
"urn:cpc:4299"
],
"comment": "<string>",
"extensions": [
{
"specVersion": "<string>",
"dataSchema": "<string>",
"documentation": "<string>",
"data": {}
}
],
"updated": "2025-01-01T00:00:00.000Z"
}
]
}{
"message": "token expired",
"code": "TokenExpired"
}{
"message": "token expired",
"code": "TokenExpired"
}id is its PCF’s
id. A PCF that a newer locked version replaced reads status: "Deprecated"; the newer footprint lists it in
precedingPfIds.
Filters
The query parameters are the PACT v3 filters. Repeat a parameter to match any of its values; different parameters must all match. An empty parameter filters nothing. A footprint is valid from its declared validity start, or else the end of its reference period, until its declared validity end, or else three years after the reference period ends.Paging
Passlimit for the page size. A page holds at most 100 footprints, whatever the limit, and can hold fewer than the
limit when a footprint fails the PACT v3 schema and is left out. Follow the Link header, not the page size: its
next URL carries your filters, so request it until there is none.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
A product's id, as urn:uuid:<id> or the bare id. Matches the PCFs of that product.
Your company's id, as urn:uuid:<id> or the bare id. Only the subdomain chooses the company, so any other company's id matches nothing.
An ISO 3166-1 alpha-2 country code. Matches the product's country.
A CPC code as a URN. Other classification schemes match nothing.
Active, Deprecated An ISO 8601 date. Matches footprints valid on that date. At most 10 values.
10An ISO 8601 date. Matches footprints whose validity starts after it. At most 10 values.
10An ISO 8601 date. Matches footprints whose validity ends before it. At most 10 values.
10The page size, at most 100.
x <= 100Where the page starts. Take it from the Link header's next URL rather than computing it.
Response
A page of PACT v3 product footprints
Show child attributes
Show child attributes