Get API key

PH Holidays API

Read-only JSON API for Philippine public holidays, with proclamation citations

Get API key
Calls without a key stop working on 23 January 2027 UTC. Until then they are served with Deprecation and Sunset headers. Get a free Sandbox key at /account or choose a Plan at /pricing.

Quick start

  1. Get a free Sandbox key (2024 data, 100 a day) or a Plan at /account.
  2. Send it in a header:
    x-api-key: phc_…
    # or
    Authorization: Bearer <key>
  3. Make your first call, GET /v1/holidays?year=2026: the Request panel has it in cURL, JavaScript and Python.
Base URLhttps://api.pholidays.com
CORSEnabled for all origins.
CachingResponses are edge-cached for up to an hour, so cache on your side too.
DatesYYYY-MM-DD in Asia/Manila.

Authentication

Send a Client key (phc_…) in the x-api-key header, or as Authorization: Bearer <key>. Choose a Plan at /pricing, then create keys at /account.

Calls without a key are being phased out. A call with a key is never affected.

Errors and limits

A refusal has the body { "error": "...", "detail": { "reason": "..." } } and cache-control: no-store.

CodeReasonMeaning
400—Invalid query parameters; detail holds the field errors.
401invalid_keyno_keyThe key is invalid or revoked, or none was sent.
403sandbox_year_onlyfeature_not_in_planpast_duesubscription_inactiveRefused.
404—No holiday recorded on that date.
429rate_limitedquota_exceededOver a limit; wait Retry-After seconds.
500—Internal error.

Endpoints

GET/v1/holidays

List holidays

Parameters

NameTypeNotes
yearinteger
min 2000, max 2100
typeHolidayType
regularspecial_non_workingspecial_workinglocal
statusHolidayStatus
confirmedprojectedpending
localitystring
Locality slug, or nationwide.min length 1, max length 100Pro & Business
fromstring (date)
Inclusive start date.
tostring (date)
Inclusive end date.
limitinteger
min 1, max 500, default 366

Responses

Errors: see Errors and limits.

Sandbox key

A Customer with no Plan access right now (never subscribed, or their Plan has lapsed) can take a free Sandbox key at /account. No card. Use it to try the API before you buy.

  • It serves 2024 only, 100 requests a day (UTC day), and the core lookups only.
  • Refusals are not counted.
RouteSandbox rule
/v1/holidaysNeeds year, or from and to, inside 2024.
/v1/holidays/{date} and /v1/is-holidayThe date must be inside 2024.
/v1/long-weekendsNeeds year = 2024.
/v1/upcomingAlways refused.
/v1/workday, /v1/export, /v1/calendar.ics and /v1/changesPlan features, refused with 403 feature_not_in_plan.
A locality other than nationwide, on a route that takes localityA Plan feature, refused with 403 feature_not_in_plan.
/v1/coverageOpen to a Sandbox key.
Headers and meta

An answer to a Sandbox key carries the header x-pholidays-sandbox: 2024:

  • On a 200 (a cache hit too), a 400, a 404 from a lookup, the 403 refusals (feature_not_in_plan, sandbox_year_only) and the daily 429.
  • Not on a 401, the per-IP 429, a 500, the OPTIONS preflight or a 404 for an unknown path.
  • A 200 also has meta.sandbox (year, requestsPerDay, remainingToday, note) and cache-control: private, no-store.

What a Sandbox key sees:

  • Every row keeps its sourceUrl and proclamationNumber. Provenance is part of every row. The source links listed in the Plans are the features built on them, not those fields.
  • /v1/holidays?year=2024 keeps the local rows. The Plan feature is filtering by locality, not seeing local rows.
  • /v1/coverage returns counts, Source status and the verification summary, never holiday rows.

Plans

PlanProBusiness
PricePro$19/month or $190/yearBusiness$59/month or $590/year
RequestsPro50,000 a month, 120 a minuteBusiness500,000 a month, 600 a minute
Client keysPro2Business10
Support withinPro2 business daysBusiness1 business day
IncludesPro
  • Core lookups (holidays, is-holiday, upcoming, long weekends, coverage)
  • Workday calculations (/v1/workday)
  • Local (locality) filters
  • Change feed
  • Links to the source proclamation
BusinessEverything in Pro, plus:
  • Bulk year export
  • iCal feed
  • Quotas are hard caps. Past the quota a call gets 429 with Retry-After. There is no overage billing.
  • Full refund on request within 14 days of a payment.
  • A past_due subscription keeps working for 7 days, then gets 403; keys are never deleted and work again when payment succeeds.

Data freshness and support

  • The sources (PCO and the Official Gazette) are checked once a day.
  • The annual PCO list is applied automatically.
  • Amendments, mid-year proclamations and some local proclamations need a manual review.
  • We add them within 2 business days of their publication by PCO or the Official Gazette.
  • Every answer carries meta.lastChecked, the last successful check of the sources (not a re-check of every holiday).
  • No uptime SLA.
  • Email support (support@pholidays.com) targets: Pro within 2 business days, Business within 1 business day.

Status values

StatusMeaning
confirmedDeclared by an official proclamation or statute.
projectedDerived from fixed legal rules (fixed dates, Easter, last Monday of August); proclamation not yet seen.
pendingE.g. Eid'l Fitr/Adha: the date is an estimate until proclaimed.

Nationwide holidays are the focus. Local holidays are best-effort and always incomplete — see /v1/coverage.