Your tests pass. What did they never touch?

Codecov for API contracts. TraceCov reads your OpenAPI spec and any HTTP traffic, then shows which properties, constraints and response variants your tests never exercised.

$ curl -sL https://cli.tracecov.sh/install/ | sh
petstore.openapi.json Operations 19 / 19
Parameters 67.65%
23 / 34 covered
Keywords 58.36%
178 / 305 covered
Responses 29.69%
19 / 64 covered

An example test run against the Petstore API. Every operation was called, yet 127 of 305 schema keywords were never exercised.

See every property, every constraint, every response.

Interactive HTML report. Drill from operations down to schema lines.

coverage.html
TraceCov coverage report showing an operation tree with green, yellow, and red indicators per property and JSON Schema constraint

…then drill into any operation and see coverage line by line.

coverage.html — POST /pet
TraceCov schema coverage detail view showing JSON Schema properties annotated line by line with valid and invalid hit counts and green, yellow, and red left-border indicators per keyword

Drop in to your existing tests

Built-in support for pytest, Django, Flask, requests and httpx in Python, Playwright, Vitest, Jest, Axios and Express in JavaScript — plus tracecov proxy mode for everything else.

import tracecov
import requests

# your OpenAPI spec as a dict
coverage = tracecov.CoverageMap.from_dict({...})
session = coverage.requests.track_session(requests.Session())

# ...your tests run as normal...

coverage.save_report(output_file="coverage.html")

Prefer hands-off? Paste our AI setup prompt into Claude Code (or any coding agent) and it wires TraceCov in for you.

Coverage that matches your API contract

Not lines of code — properties and constraints in your OpenAPI spec.

Property-level coverage

Every property in your spec, plus every JSON Schema keyword that defines it: minimum, pattern, enum. Most tools stop at “did you call this endpoint.”

Bidirectional coverage

Tests can pass while only ever sending valid input. TraceCov tracks positive and negative coverage separately. No major API coverage tool tracks this.

Untestable branches identified

Some schema combinations can never be satisfied — oneOf with mutually exclusive constraints, impossible enum/pattern combos. TraceCov computes satisfiability and flags them. No false coverage gaps to chase.

OpenAPI 2.0, 3.0, 3.1, 3.2

JSON, XML, form data, every parameter location. Full JSON Schema draft support across all spec versions.

HTML, Markdown and JSON reports

HTML for local review. Markdown for PRs. JSON for artifacts and jq.

Coverage thresholds

Fail CI with --fail-under when coverage drops. Set per-metric thresholds for operations, parameters, keywords, examples and responses. Gate merges on real coverage, not vibes.

Using another coverage tool? See how TraceCov compares.

Case study

Schemathesis called every GitLab endpoint. 562 form fields went out as JSON.

TraceCov showed 44% of the schema’s parameters were never sent the way the schema declares them. One Schemathesis fix later, all 1,291 are.

gitlab.com/v3.json Operations 358 / 358
Schemathesis 4.18.0 Schemathesis 4.18.5 Parameters
729 / 1,29156.47%
1,291 / 1,291100%
Keywords
1,130 / 1,79063.13%
1,789 / 1,79099.94%
Read the case study

Zero-instrumentation coverage with tracecov proxy.

Put it in front of any HTTP service. Anything that hits the proxy — curl, browser, manual QA, a load test — becomes coverage data against your spec. No SDK, no test framework, no language requirement.

$ tracecov proxy --spec openapi.json --port 8080

Works with your stack

pytest Django Flask requests httpx Playwright Vitest Jest Axios fetch Express
Gate merges on real coverage, not vibes

Find out what your tests
are actually covering.

Upload your spec and traffic in the demo — coverage report in 30 seconds, no install. Or see what it found in Schemathesis.