Skip to content
GET /v1/metrics

EVM variances & indices

Try it live

10 free calls per day — no sign-up, no API key. Goes through the oanor gateway.

Custom headers (optional)
api.oanor.com/earnedvalue-api

It works. Grab an API key and use it in your project.

Get an API key

Code snippets

curl "https://api.oanor.com/earnedvalue-api/v1/metrics" \
  -H "x-oanor-key: oanor_test_..."
await fetch("https://api.oanor.com/earnedvalue-api/v1/metrics", {
  headers: { "x-oanor-key": "oanor_test_..." }
});
$ch = curl_init("https://api.oanor.com/earnedvalue-api/v1/metrics");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["x-oanor-key: oanor_test_..."]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$out = curl_exec($ch);
import requests
requests.get(
    "https://api.oanor.com/earnedvalue-api/v1/metrics",
    headers={"x-oanor-key": "oanor_test_..."}
)

Example response

A real response from this endpoint, captured by the latest health check.

{
    "data": {
        "cpi": 0.875,
        "spi": 0.875,
        "note": "CV = EV−AC, SV = EV−PV; CPI = EV/AC, SPI = EV/PV. Index ≥ 1 is good; CPI 0.9 means 90 cents of value per dollar spent.",
        "inputs": {
            "ac": 400,
            "ev": 350,
            "pv": 400,
            "bac": 1000
        },
        "cost_status": "over budget",
        "cost_variance": -50,
        "percent_spent": 40,
        "schedule_status": "behind schedule",
        "percent_complete": 35,
        "schedule_variance": -50,
        "cost_variance_percent": -14.2857,
        "schedule_variance_percent": -12.5
    },
    "meta": {
        "timestamp": "2026-06-05T21:48:48.633Z",
        "request_id": "c28ee8a3-1bac-4997-b40f-6f0a33a48c89"
    },
    "status": "ok",
    "message": "EVM metrics",
    "success": true
}