Developers
Send data in, take figures out.
Organisation API keys push activity data into the review queue and pull published figures into your own systems. Webhooks tell you when something changes.
curl "https://www.metricora.co.uk/api/orgs/{orgId}/reports/export?snapshotId={id}&format=csv" \
-H "Authorization: Bearer csk_…"API keys
An admin creates keys under Settings, then API keys. Keys start with csk_, belong to one organisation and are shown once.
Authentication
Send the key as a bearer token. A key for one organisation is refused on another organisation's endpoints.
Nothing skips review
Ingested rows arrive as an import batch. Someone in your team commits it before it becomes activity records.
Endpoints
What an API key can call.
All paths are relative to https://www.metricora.co.uk.
/api/orgs/{orgId}/integrations/{utilities|fleet|corporate-cards|webhooks}/ingestSend supplier, fleet, card or generic rows. They are normalised and staged as an import for a person to review and commit. Resending an identical payload returns the first batch.
/api/orgs/{orgId}/integrations/plant/ingestPlant telematics snapshots in ISO 15143-3 (AEMP 2.0) form. Cumulative hours and fuel are differenced per machine.
/api/orgs/{orgId}/reports/export?snapshotId=…&format=json|csvFigures from a published snapshot, with includeLineItems=true for every calculation row.
/api/orgs/{orgId}/reports/xbrl-export?snapshotId=…Inline XBRL of a published snapshot for digital tagging.
/api/orgs/{orgId}/supplier-portal/pact-import · pact-exportProduct carbon footprints in the PACT data exchange format.
Webhooks
Signed events to your endpoint.
Add an HTTPS endpoint under Settings, then Webhooks, and choose the events. Each delivery carries an X-MetricOra-Signature header: the HMAC-SHA256 of the raw body with your endpoint's secret.
- calculation_run.completed
- report.ready
- field_submission.approved
- field_submission.rejected
- import.committed
import crypto from "node:crypto";
const expected = crypto
.createHmac("sha256", process.env.METRICORA_WEBHOOK_SECRET)
.update(rawBody)
.digest("hex");
if (expected !== req.headers["x-metricora-signature"]) {
return res.status(401).end();
}Need an endpoint that is not here?
Tell us what you want to connect and we will look at it with you.