Skip to main content
Test impact analysis uses your repository’s graph to pick the tests a change can affect. Your CI sends the changed files, or a commit range, and Graphify returns the tests to run. When Graphify isn’t sure, it returns the full suite, so CI never skips a test silently.
Test impact analysis is available in enabled Graphify workspaces. For the full Buildkite setup, including the pipeline script, see Buildkite test selection.

How test impact analysis works

  1. A workspace owner or admin creates a CI token under Integrations → BuildKite (Test Impact). CI tokens start with gfy_ci_ and only work on the test impact endpoint.
  2. Your CI calls POST https://api.graphify.com/v1/repos/{repositoryId}/test-impact with the token as a bearer token.
  3. Graphify checks that the repository belongs to the token’s workspace and that the workspace’s subscription is active.
  4. Graphify runs the selection against the repository’s latest published graph.
  5. The response is returned as-is: a Buildkite pipeline ({"steps": [...]}) or JSON, which you can pipe straight into buildkite-agent pipeline upload.
repositoryId is the repository’s Graphify ID, not its GitHub name.

Send changed files or a commit range

The request takes one of two diff sources. Sending both returns 422 invalid_diff_source.
Send the PR’s merge base and head commit. Graphify reads the diff from GitHub itself, including deletions and renames.
Request body
Commit-range mode needs a connected GitHub repository. For any other repository it returns 422 test_impact_range_unsupported.
Unknown fields are rejected.

Ignore non-code files

You can set ignore globs for files that never affect tests, such as docs. A repository’s setting overrides the workspace default. Graphify keeps up to 200 globs, each up to 256 characters.

Limits

Each workspace can make 60 test impact requests per minute by default. The limit applies to the whole workspace, no matter how many tokens or repositories it uses. Over the limit returns 429 rate_limited. See Rate limits. A single selection can take up to about 45 seconds, so give the request a generous timeout. The Buildkite script uses 180 seconds.

Errors

Treat any 429 or 5xx as “run everything”. The Buildkite script already does this.

Buildkite test selection

The full pipeline setup.

Check impact

How Graphify traces what a change touches.

Hosted MCP

The same graph, for your coding agent.

Rate limits

Default limits for every endpoint.