Count working days between two dates (skips weekends and holidays)
Counts working days between two dates (inclusive), excluding weekends and public holidays, and lists the holidays that fell on weekdays.
Request
GEThttps://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31
*
String. ISO country code, e.g.
IN, US, GB. *
String. YYYY-MM-DD.
*
String. YYYY-MM-DD (inclusive)
String. State/province code, e.g.
MH (Maharashtra), KA, TN. See /v1/countries. Boolean. Six-day week (default
false). Language
Client
1curl --request GET \
2 --url 'https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D' \
3 --header 'Accept: application/json' \
4 --header 'X-API-Key: YOUR_API_KEY'Count working days between two dates (skips weekends and holidays): Public Holidays API reference
Counts working days between two dates (inclusive), excluding weekends and public holidays, and lists the holidays that fell on weekdays. This endpoint is part of the Public Holidays API: Public holidays for 150+ countries — including Indian states — plus 'is it a holiday?', upcoming holidays and working-day counts.
Count working days between two dates (skips weekends and holidays): example requests in every language
GET /v1/working-days in Shell (cURL)
curl --request GET \
--url 'https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D' \
--header 'Accept: application/json' \
--header 'X-API-Key: YOUR_API_KEY'GET /v1/working-days in Shell (HTTPie)
http GET 'https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D' \
Accept:application/json \
X-API-Key:YOUR_API_KEYGET /v1/working-days in Shell (Wget)
wget --quiet \
--method GET \
--header 'Accept: application/json' \
--header 'X-API-Key: YOUR_API_KEY' \
--output-document \
- 'https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D'GET /v1/working-days in Node.js (http)
const http = require('https');
const options = {
method: 'GET',
hostname: 'public-holidays.p.apihiver.com',
port: null,
path: '/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D',
headers: {
Accept: 'application/json',
'X-API-Key': 'YOUR_API_KEY'
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on('data', function (chunk) {
chunks.push(chunk);
});
res.on('end', function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();GET /v1/working-days in Node.js (Request)
const request = require('request');
const options = {
method: 'GET',
url: 'https://public-holidays.p.apihiver.com/v1/working-days',
qs: {
country: 'IN',
start: '2026-10-01',
end: '2026-10-31',
subdivision: '{subdivision}',
saturday_is_working: '{saturday_is_working}'
},
headers: {Accept: 'application/json', 'X-API-Key': 'YOUR_API_KEY'}
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});GET /v1/working-days in Node.js (Unirest)
const unirest = require('unirest');
const req = unirest('GET', 'https://public-holidays.p.apihiver.com/v1/working-days');
req.query({
country: 'IN',
start: '2026-10-01',
end: '2026-10-31',
subdivision: '{subdivision}',
saturday_is_working: '{saturday_is_working}'
});
req.headers({
Accept: 'application/json',
'X-API-Key': 'YOUR_API_KEY'
});
req.end(function (res) {
if (res.error) throw new Error(res.error);
console.log(res.body);
});GET /v1/working-days in Node.js (Axios)
const axios = require('axios').default;
const options = {
method: 'GET',
url: 'https://public-holidays.p.apihiver.com/v1/working-days',
params: {
country: 'IN',
start: '2026-10-01',
end: '2026-10-31',
subdivision: '{subdivision}',
saturday_is_working: '{saturday_is_working}'
},
headers: {Accept: 'application/json', 'X-API-Key': 'YOUR_API_KEY'}
};
try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}GET /v1/working-days in Node.js (Fetch)
const fetch = require('node-fetch');
const url = 'https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D';
const options = {
method: 'GET',
headers: {Accept: 'application/json', 'X-API-Key': 'YOUR_API_KEY'}
};
try {
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}GET /v1/working-days in JavaScript (XMLHttpRequest)
const data = null;
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener('readystatechange', function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open('GET', 'https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D');
xhr.setRequestHeader('Accept', 'application/json');
xhr.setRequestHeader('X-API-Key', 'YOUR_API_KEY');
xhr.send(data);GET /v1/working-days in JavaScript (Axios)
import axios from 'axios';
const options = {
method: 'GET',
url: 'https://public-holidays.p.apihiver.com/v1/working-days',
params: {
country: 'IN',
start: '2026-10-01',
end: '2026-10-31',
subdivision: '{subdivision}',
saturday_is_working: '{saturday_is_working}'
},
headers: {Accept: 'application/json', 'X-API-Key': 'YOUR_API_KEY'}
};
try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}GET /v1/working-days in JavaScript (Fetch)
const url = 'https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D';
const options = {
method: 'GET',
headers: {Accept: 'application/json', 'X-API-Key': 'YOUR_API_KEY'}
};
try {
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}GET /v1/working-days in JavaScript (jQuery)
const settings = {
async: true,
crossDomain: true,
url: 'https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D',
method: 'GET',
headers: {
Accept: 'application/json',
'X-API-Key': 'YOUR_API_KEY'
}
};
$.ajax(settings).done(function (response) {
console.log(response);
});GET /v1/working-days in Python (http.client)
import http.client
conn = http.client.HTTPSConnection("public-holidays.p.apihiver.com")
headers = {
'Accept': "application/json",
'X-API-Key': "YOUR_API_KEY"
}
conn.request("GET", "/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))GET /v1/working-days in Python (Requests)
import requests
url = "https://public-holidays.p.apihiver.com/v1/working-days"
querystring = {"country":"IN","start":"2026-10-01","end":"2026-10-31","subdivision":"{subdivision}","saturday_is_working":"{saturday_is_working}"}
headers = {
"Accept": "application/json",
"X-API-Key": "YOUR_API_KEY"
}
response = requests.get(url, headers=headers, params=querystring)
print(response.json())GET /v1/working-days in PHP (cURL)
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Accept: application/json",
"X-API-Key: YOUR_API_KEY"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}GET /v1/working-days in PHP (Guzzle)
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D', [
'headers' => [
'Accept' => 'application/json',
'X-API-Key' => 'YOUR_API_KEY',
],
]);
echo $response->getBody();GET /v1/working-days in PHP (PECL HTTP v1)
<?php
$request = new HttpRequest();
$request->setUrl('https://public-holidays.p.apihiver.com/v1/working-days');
$request->setMethod(HTTP_METH_GET);
$request->setQueryData([
'country' => 'IN',
'start' => '2026-10-01',
'end' => '2026-10-31',
'subdivision' => '{subdivision}',
'saturday_is_working' => '{saturday_is_working}'
]);
$request->setHeaders([
'Accept' => 'application/json',
'X-API-Key' => 'YOUR_API_KEY'
]);
try {
$response = $request->send();
echo $response->getBody();
} catch (HttpException $ex) {
echo $ex;
}GET /v1/working-days in PHP (PECL HTTP v2)
<?php
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://public-holidays.p.apihiver.com/v1/working-days');
$request->setRequestMethod('GET');
$request->setQuery(new http\QueryString([
'country' => 'IN',
'start' => '2026-10-01',
'end' => '2026-10-31',
'subdivision' => '{subdivision}',
'saturday_is_working' => '{saturday_is_working}'
]));
$request->setHeaders([
'Accept' => 'application/json',
'X-API-Key' => 'YOUR_API_KEY'
]);
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();GET /v1/working-days in Java (AsyncHttp)
AsyncHttpClient client = new DefaultAsyncHttpClient();
client.prepare("GET", "https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D")
.setHeader("Accept", "application/json")
.setHeader("X-API-Key", "YOUR_API_KEY")
.execute()
.toCompletableFuture()
.thenAccept(System.out::println)
.join();
client.close();GET /v1/working-days in Java (java.net.http)
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D"))
.header("Accept", "application/json")
.header("X-API-Key", "YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());GET /v1/working-days in Java (OkHttp)
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D")
.get()
.addHeader("Accept", "application/json")
.addHeader("X-API-Key", "YOUR_API_KEY")
.build();
Response response = client.newCall(request).execute();GET /v1/working-days in Java (Unirest)
HttpResponse<String> response = Unirest.get("https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D")
.header("Accept", "application/json")
.header("X-API-Key", "YOUR_API_KEY")
.asString();GET /v1/working-days in C# (HttpClient)
using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-Key", "YOUR_API_KEY" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}GET /v1/working-days in C# (RestSharp)
var client = new RestClient("https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D");
var request = new RestRequest("", Method.Get);
request.AddHeader("Accept", "application/json");
request.AddHeader("X-API-Key", "YOUR_API_KEY");
var response = client.Execute(request);GET /v1/working-days in Go (NewRequest)
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-Key", "YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}GET /v1/working-days in Ruby (net::http)
require 'uri'
require 'net/http'
url = URI("https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'
request["X-API-Key"] = 'YOUR_API_KEY'
response = http.request(request)
puts response.read_bodyGET /v1/working-days in Swift (NSURLSession)
import Foundation
let headers = [
"Accept": "application/json",
"X-API-Key": "YOUR_API_KEY"
]
let request = NSMutableURLRequest(url: NSURL(string: "https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()GET /v1/working-days in Objective-C (NSURLSession)
#import <Foundation/Foundation.h>
NSDictionary *headers = @{ @"Accept": @"application/json",
@"X-API-Key": @"YOUR_API_KEY" };
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
[request setHTTPMethod:@"GET"];
[request setAllHTTPHeaderFields:headers];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
NSLog(@"%@", httpResponse);
}
}];
[dataTask resume];GET /v1/working-days in Kotlin (OkHttp)
val client = OkHttpClient()
val request = Request.Builder()
.url("https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D")
.get()
.addHeader("Accept", "application/json")
.addHeader("X-API-Key", "YOUR_API_KEY")
.build()
val response = client.newCall(request).execute()GET /v1/working-days in C (libcurl)
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Accept: application/json");
headers = curl_slist_append(headers, "X-API-Key: YOUR_API_KEY");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);GET /v1/working-days in Clojure (clj-http)
(require '[clj-http.client :as client])
(client/get "https://public-holidays.p.apihiver.com/v1/working-days" {:headers {:X-API-Key "YOUR_API_KEY"}
:query-params {:country "IN"
:start "2026-10-01"
:end "2026-10-31"
:subdivision "{subdivision}"
:saturday_is_working "{saturday_is_working}"}
:accept :json})GET /v1/working-days in OCaml (CoHTTP)
open Cohttp_lwt_unix
open Cohttp
open Lwt
let uri = Uri.of_string "https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D" in
let headers = Header.add_list (Header.init ()) [
("Accept", "application/json");
("X-API-Key", "YOUR_API_KEY");
] in
Client.call ~headers `GET uri
>>= fun (res, body_stream) ->
(* Do stuff with the result *)GET /v1/working-days in R (httr)
library(httr)
url <- "https://public-holidays.p.apihiver.com/v1/working-days"
queryString <- list(
country = "IN",
start = "2026-10-01",
end = "2026-10-31",
subdivision = "{subdivision}",
saturday_is_working = "{saturday_is_working}"
)
response <- VERB("GET", url, query = queryString, add_headers('X-API-Key' = 'YOUR_API_KEY'), content_type(""), accept("application/json"))
content(response, "text")GET /v1/working-days in PowerShell (Invoke-WebRequest)
$headers=@{}
$headers.Add("Accept", "application/json")
$headers.Add("X-API-Key", "YOUR_API_KEY")
$response = Invoke-WebRequest -Uri 'https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D' -Method GET -Headers $headersGET /v1/working-days in PowerShell (Invoke-RestMethod)
$headers=@{}
$headers.Add("Accept", "application/json")
$headers.Add("X-API-Key", "YOUR_API_KEY")
$response = Invoke-RestMethod -Uri 'https://public-holidays.p.apihiver.com/v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D' -Method GET -Headers $headersGET /v1/working-days in HTTP (HTTP/1.1)
GET /v1/working-days?country=IN&start=2026-10-01&end=2026-10-31&subdivision=%7Bsubdivision%7D&saturday_is_working=%7Bsaturday_is_working%7D HTTP/1.1
Accept: application/json
X-Api-Key: YOUR_API_KEY
Host: public-holidays.p.apihiver.com
Example response (200, application/json)
Success.
1{
2 "end": "2026-10-31",
3 "start": "2026-10-01",
4 "working_days": 21,
5 "calendar_days": 31,
6 "holidays_on_weekdays": [
7 {
8 "date": "2026-10-02",
9 "name": "Gandhi Jayanti"
10 }
11 ]
12}Errors
- 400 — A required parameter is missing or a value has the wrong format.
1{ 2 "error": { 3 "code": "INVALID_INPUT", 4 "message": "country: Field required" 5 } 6}
Gateway errors (missing key, no subscription, rate limits) are listed in Error codes.