Graphing quadratic inequalities
Type the three coefficients and the sign, and see which part of the line to shade: x² − 5x + 6 ≤ 0 has roots 2 and 3, the parabola opens upward, and the answer is [2, 3]. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- A
- 1
- B
- -5
- C
- 6
- Sign
- <=
- Inequality
- 1x^2 - 5x + 6 <= 0
- Discriminant
- 1
- Parabola
- opens_up
- Roots
- 2, 3
Graphing quadratic inequalities is where algebra students most often lose the thread: finding the roots is the easy half, deciding which side of them to shade is the hard one. This capability takes the three coefficients of ax²+bx+c and the inequality sign, and returns the full picture — the discriminant, the boundary roots when they exist, which way the parabola opens, and the solution region both as interval notation and as a plain-language shading instruction. It handles every case deterministically: two distinct roots, a double root, and parabolas that never touch the x-axis at all.
From coefficients to a graph in one call
A quadratic inequality such as x²−5x+6 ≤ 0 asks for every value of x that makes the expression true, and the honest way to show the answer is a graph: draw the parabola, mark where it crosses the x-axis, and shade the region that satisfies the sign. Doing that by hand means computing the discriminant, solving for the roots, deciding the parabola's direction, and then reasoning about which side of the boundary belongs to the solution.
You send a, b, c and one of the four signs (<, <=, >, >=); you get back the boundary roots ordered from left to right, whether the parabola opens up or down, and a region object that states the shading in two interchangeable forms — compact interval notation like [-1, 4] or (-∞, 2) ∪ (3, +∞), and a sentence you could read straight to a student. Because the input is just three numbers and a sign, the whole thing resolves in microseconds and the result is byte-for-byte reproducible.
How the boundary cases are handled
Most mistakes in this topic come from the edges, so the solver treats them explicitly rather than as afterthoughts. When the discriminant is positive there are two distinct roots and the answer is either the interval between them or the union of the two outer wings, depending on the sign and on whether the parabola opens upward or downward — the solver flips the logic for you when a is negative, which is exactly where hand solutions go wrong.
When the discriminant is zero the parabola merely touches the axis at a double root, and the answer can be a single closed point, the whole line, the whole line with one open point, or the empty set; all four outcomes are distinguished and reported. When the discriminant is negative the curve never meets the axis, so the solution is either all real numbers or nothing at all.
Using it in homework tools, tutoring and content pipelines
The output is designed to be consumed by software, not just read. A homework checker can compare a student's shaded sketch against the interval; a tutoring app can read the description aloud; a content pipeline can generate hundreds of consistent worked examples by iterating over coefficients.
What you can do with it
Render the graph in a tutoring app
Use the ordered roots and the shading vocabulary to draw the parabola boundary and the shaded band on a canvas without re-deriving the math.
Generate worked examples at scale
Iterate over coefficient sets to produce consistent, deterministic solutions for worksheets, with roots, discriminant and region in one object.
FAQ
What input does it expect?
Three coefficients a, b and c (finite numbers, with a non-zero) and a sign, one of <, <=, > or >=.
What if the parabola has no real roots?
The discriminant is reported as negative and the region is either all real numbers or the empty set, depending on the sign and the parabola's direction.
Is the result deterministic?
Yes. It is pure arithmetic with stable rounding, no randomness and no clock, so identical inputs always return byte-identical outputs.
How are strict and inclusive signs drawn?
Strict signs, less than or greater than, leave the roots out of the answer, so they get open circles and a dashed curve. Inclusive signs keep the roots in, with closed circles and a solid curve.
What happens when the discriminant is zero?
The parabola only touches the axis at a double root. Depending on the sign, the answer is that single point, the whole line, the whole line except that point, or no solution at all.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/math/graphing-quadratic-inequalities \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"a":1,"b":-5,"c":6,"sign":"<="}'const res = await fetch("https://api.kit.forhosting.com/math/graphing-quadratic-inequalities", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"a": 1,
"b": -5,
"c": 6,
"sign": "<="
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/graphing-quadratic-inequalities",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"a": 1,
"b": -5,
"c": 6,
"sign": "<="
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/graphing-quadratic-inequalities", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"a":1,"b":-5,"c":6,"sign":"<="}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"a":1,"b":-5,"c":6,"sign":"<="}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/graphing-quadratic-inequalities", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"a": 1,
"b": -5,
"c": 6,
"sign": "<="
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.graphing_quadratic_inequalities",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
The same code runs free in your browser and over the API for $0.002 per call.
From coefficients to a graph in one call
This endpoint performs that entire chain for you.
How the boundary cases are handled
Strict signs always produce open endpoints and a dashed boundary curve; inclusive signs produce closed endpoints and a solid curve, and the description says so.
Using it in homework tools, tutoring and content pipelines
The roots array gives you the x-intercepts in ascending order so a canvas renderer can place the boundary points directly; the shading field is one of a small closed vocabulary (between_roots, outside_roots, single_point, all_except_root, all_real, no_solution), so a UI can switch on it without parsing text; and the interval string plus the description cover display and accessibility respectively.
Integration use cases
Power a homework checker
Compare a student's interval answer against the computed solution region and mark open versus closed endpoints correctly.
Technical questions
What does it cost?
$0.002 per call via the API. It is also free to run in your browser on this page — the widget runs the same code.
How are strict versus inclusive signs reflected?
Strict signs (< and >) yield open endpoints and a dashed boundary; inclusive signs (<= and >=) yield closed endpoints and a solid boundary. The description states which applies.
Why is a = 0 rejected?
Because with a = 0 the expression is linear, not quadratic. Solve it with a linear inequality solver instead; this capability errors rather than silently change the problem.