Easter Sunday date
Easter Sunday 2026 falls on 5 April. Enter any year to get the Western Easter date, the first Sunday after the church full moon on or after 21 March, then place Good Friday two days earlier and Easter Monday one day later. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Year
- 2,026
- Date
- 2026-04-05
- Month
- 4
- Day
- 5
Easter Sunday does not fall on a fixed calendar day: it is defined as the first Sunday after the ecclesiastical full moon that falls on or after 21 March. That rule produces a date that can land anywhere from 22 March through 25 April, and hand-counting moon tables is error-prone for planners, calendars, and holiday pipelines. This capability runs the Anonymous Gregorian algorithm (Meeus/Jones/Butcher) on a single integer year and returns the Gregorian Easter Sunday as an ISO-8601 date plus month and day fields, with no network calls and fully deterministic arithmetic.
What the Gregorian Easter computus actually computes
Western churches that follow the Gregorian calendar fix Easter Sunday with an ecclesiastical approximation of the lunar cycle rather than with a live astronomical observation. The result is always a Sunday in March or April of that same Gregorian year. The algorithm used here is the widely published Anonymous Gregorian form popularized by Meeus, Jones, and Butcher; it is the same family of formulas used by many civil calendars, programming libraries, and national almanacs.
Because every step is modular arithmetic on the year alone, two callers with the same year always receive the same ISO date, which makes the result safe to cache, assert in tests, and embed in generated holiday tables without drift across time zones or server locales.
Where Easter dates fit into real scheduling work
Many regions treat Good Friday, Easter Monday, or both as public holidays whose legal dates move with Easter Sunday. Payroll systems, school calendars, logistics cut-offs, retail promotions, and church event tools therefore need a reliable Easter date for every year they plan, not only the current one. Feed this capability a range of years in a loop or through a batch wrapper, store the ISO dates, and derive related observances with simple day offsets (for example, Good Friday is two days earlier and Easter Monday is one day later).
What you can do with it
Generate multi-year public holiday tables
Compute Easter Sunday for each year in a planning horizon, then derive movable public holidays such as Good Friday and Easter Monday for payroll and leave systems.
Church and community event calendars
Publish liturgy, service, and community schedules that depend on Easter without maintaining hand-edited moon tables for each year.
Retail and logistics seasonal planning
Anchor promotions, staffing, and delivery cut-offs to the correct Easter weekend across regions that observe related holidays.
FAQ
How do I get the Easter Sunday date for a year?
The response includes date as an ISO string such as 2026-04-05 plus month and day fields.
Which algorithm is used for Easter?
The Anonymous Gregorian computus (Meeus/Jones/Butcher). It implements the Western ecclesiastical rule for Gregorian Easter Sunday with pure integer arithmetic.
Does this return Orthodox (Julian) Easter?
Orthodox and Julian paschal dates use a different computus and are out of scope here.
What years are accepted?
Any integer year greater than or equal to 1.
What are the earliest and latest possible Easter dates?
Western Easter Sunday always falls between 22 March and 25 April. The exact day depends on the church full moon on or after 21 March, which is why it changes from one year to the next.
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/date/easter \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"year":2026}'const res = await fetch("https://api.kit.forhosting.com/date/easter", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"year": 2026
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/easter",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"year": 2026
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/easter", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"year":2026}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"year":2026}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/easter", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"year": 2026
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.easter",
"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
How to call the endpoint and read the response
On success the response includes date as a full ISO calendar string (YYYY-MM-DD), plus the same year, the month number (3 for March or 4 for April), and the day of month as integers for callers that prefer components over a string. Send a JSON body with a single required field, year, as a positive integer (one or greater). The service rejects missing years, non-integers, and values below one with an invalid_input error so bad payloads never produce a silent wrong date. There is no optional calendar switch and no Julian mode: this endpoint is dedicated to the Gregorian computus so product and SEO intent stay clear. Pricing is a flat $0.002 per successful request under the published item unit; failed validation is not charged. Use the free in-browser tool for one-off checks, and the API when you need the same contract inside a batch job, a scheduling service, or a multi-year holiday generator.
Technical questions
How much does the Easter date API cost?
The browser tool is free for interactive use. The API charges the published base price of $0.002 per successful request from your prepaid balance; invalid input is not charged.