Reflected-Light Planet Apparent Magnitude Calculator
This reflected-light planet magnitude calculator estimates how bright a planet appears by comparing its reflected sunlight with the Sun as seen at one astronomical unit.
Run — free
Supply the planet radius, geometric albedo, illuminated phase factor, distance from the Sun, and distance from the observer. The result includes apparent magnitude and the underlying reflected flux ratio, making the calculation useful both for quick observing estimates and for transparent, reproducible professional astronomy workflows.
What the reflected-light model calculates
A planet usually produces negligible visible light of its own, so its optical brightness is dominated by sunlight that reaches its surface, is scattered, and then travels to the observer. This calculator expresses that chain as a dimensionless flux ratio relative to the Sun observed from one astronomical unit. The ratio multiplies geometric albedo, the supplied phase fraction, and the square of the planet radius in astronomical units. It then divides by the squares of both distances: Sun to planet and planet to observer. The apparent magnitude follows from the standard logarithmic magnitude relation, using a default solar apparent magnitude of -26.74. Because magnitude runs backward, a smaller or more negative answer represents a brighter object. The output also reports the flux ratio and converted radius, so the intermediate scale is visible rather than hidden. The model is deterministic and contains no empirical planet-specific correction terms, atmospheric extinction, thermal emission, rings, or transient weather effects. It is therefore best understood as a clean reflected-light estimate based directly on the quantities supplied.
Choose radius, albedo, phase, and distances consistently
Enter the physical radius in kilometers, not diameter. Geometric albedo is the appropriate reflectivity measure because it compares full-phase brightness with an ideal diffusely reflecting disk of the same cross section; it is not necessarily the same as Bond albedo. The phase fraction is a user-supplied phase-function value between zero and one. A value of one represents the full-phase reference, while a smaller positive value accounts for the reduced reflected light at another viewing geometry. If you begin with a phase angle, first evaluate a suitable phase law for the kind of body being modeled; different surfaces and atmospheres need not follow the same curve. Both distances are in astronomical units. The Sun distance controls the illumination received by the planet, while the observer distance controls how much the reflected beam spreads before detection. Neither distance may be zero or negative. Albedo and phase must also be positive for a finite magnitude: a zero reflected flux corresponds mathematically to infinite faintness, which cannot be represented as a finite apparent-magnitude number.
Interpret the result and understand its limits
Use the apparent magnitude as an idealized brightness estimate before applying observing conditions. A telescope or camera does not record magnitude alone: sky background, angular separation from the Sun or host star, detector response, filters, atmospheric extinction, and exposure time all affect detectability. The reflected flux ratio is especially useful when checking a spreadsheet or integrating the calculation into a simulation, because it shows the linear quantity from which the logarithmic result was derived. Small changes in distance matter strongly because both distance terms are squared. Radius is squared as well, so doubling radius at fixed albedo, phase, and geometry makes the modeled flux four times larger. Albedo and phase enter linearly. This formula treats the planet as unresolved and uses a single geometric albedo across the relevant band. Real planets can vary with wavelength, rotation, clouds, surface markings, rings, and phase-dependent scattering. For precision ephemerides or calibrated photometry, use band-specific phase curves and current geometry. For comparisons, teaching, feasibility checks, and reproducible baseline estimates, the simplified model provides a clear starting point.
What you can do with it
Estimate an observing target
Turn a planet's physical properties and current geometry into a baseline apparent magnitude before considering equipment and sky conditions.
Compare hypothetical worlds
Hold orbital geometry constant while varying radius or geometric albedo to see how candidate planets differ in reflected brightness.
Check astronomy calculations
Use the returned flux ratio and converted radius to audit a spreadsheet, lesson, simulation, or independent implementation.
FAQ
What does the calculation cost?
An API request costs $0.002; the same deterministic calculation can also run in the browser.
Is phase fraction the illuminated fraction of the visible disk?
Not always. It should be the normalized reflected-light phase-function value for the chosen viewing angle and scattering model.
Why use geometric albedo instead of Bond albedo?
Geometric albedo is tied to brightness toward an observer at full phase, while Bond albedo measures total reflected energy over all directions and wavelengths.
Why are zero distances rejected?
The inverse-square terms divide by both distances, so zero or negative distances are outside the physical and mathematical domain of the model.
Does the result include atmospheric extinction or telescope sensitivity?
No. It is an intrinsic reflected-light estimate for the supplied geometry; observing conditions and instrument response must be applied separately.
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/astro/apparent-magnitude-planet \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"radius_km":71492,"geometric_albedo":0.538,"phase_fraction":1,"sun_distance_au":5.2,"observer_distance_au":4.2}'const res = await fetch("https://api.kit.forhosting.com/astro/apparent-magnitude-planet", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"radius_km": 71492,
"geometric_albedo": 0.538,
"phase_fraction": 1,
"sun_distance_au": 5.2,
"observer_distance_au": 4.2
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/astro/apparent-magnitude-planet",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"radius_km": 71492,
"geometric_albedo": 0.538,
"phase_fraction": 1,
"sun_distance_au": 5.2,
"observer_distance_au": 4.2
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/astro/apparent-magnitude-planet", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"radius_km":71492,"geometric_albedo":0.538,"phase_fraction":1,"sun_distance_au":5.2,"observer_distance_au":4.2}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"radius_km":71492,"geometric_albedo":0.538,"phase_fraction":1,"sun_distance_au":5.2,"observer_distance_au":4.2}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/astro/apparent-magnitude-planet", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"radius_km": 71492,
"geometric_albedo": 0.538,
"phase_fraction": 1,
"sun_distance_au": 5.2,
"observer_distance_au": 4.2
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "astro.apparent_magnitude_planet",
"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. |