africacompliancedata-com Holidays and business days API

All plans, including calendar feeds; the holiday watch from Developer up.

Operations 6

GET /v1/holidays/watch Announced and moon-sighted holidays across countries, estimated or confirmed. #
GET /v1/countries/{country}/holidays Public holidays of a year #
GET /v1/countries/{country}/holidays.ics Holidays as an iCalendar feed #
GET /v1/countries/{country}/is-business-day Is a date a working day? #
GET /v1/countries/{country}/business-days Working days between two dates (both included) #
GET /v1/countries/{country}/add-business-days The date N working days later (or earlier) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/africacompliancedata-com:africacompliancedata-com-holidays-and-business-days-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

africacompliancedata-com-holidays-and-business-days-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Africacompliancedata Com Holidays and business days API
  version: 1.0.0
  contact:
    name: Africa Compliance Data
    email: support@africacompliancedata.com
    url: https://africacompliancedata.com
  license:
    name: 'Proprietary: use under the Terms of Service'
    url: https://africacompliancedata.com/terms
  termsOfService: https://africacompliancedata.com/terms
  description: 'Operations tagged Holidays and business days across 2 of this provider''s published API definitions: africacompliancedata-com-openapi.json, africacompliancedata-com.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.africacompliancedata.com
security:
- ApiKey: []
- Bearer: []
tags:
- name: Holidays and business days
  description: All plans, including calendar feeds; the holiday watch from Developer up.
paths:
  /v1/holidays/watch:
    get:
      tags:
      - Holidays and business days
      operationId: getHolidayWatch
      summary: Announced and moon-sighted holidays across countries, estimated or confirmed.
      description: Holidays whose date depends on an announcement (Eid, Mawlid and other moon-sighted holidays, ad-hoc days off) from 7 days ago to `days` ahead, with status estimated (not announced yet; also weekend substitutes of estimated dates) or confirmed (with its source, once a reviewer has verified the announcement). Countries without a verified holiday list are skipped. Shares the per-key limit of 5 requests per minute with full country profiles (429).
      parameters:
      - name: days
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 60
          default: 14
      - name: countries
        in: query
        schema:
          type: string
        description: Comma-separated ISO codes; omit for all countries (an empty value returns 400)
        example: KE,NG,MA
      responses:
        '200':
          description: Holiday watch
          content:
            application/json:
              schema:
                type: object
                properties:
                  from:
                    type: string
                    format: date
                  to:
                    type: string
                    format: date
                  generated:
                    type: string
                    format: date
                    description: Date (UTC) the answer was computed
                  dataset_version:
                    type: string
                  data_revision:
                    $ref: '#/components/schemas/DataRevision'
                  pending:
                    type: integer
                    description: Upcoming holidays still estimated
                  holidays:
                    type: array
                    items:
                      type: object
                      properties:
                        country:
                          type: string
                        country_name:
                          type: string
                        date:
                          type: string
                          format: date
                        name:
                          type: string
                        rule_id:
                          type:
                          - string
                          - 'null'
                        kind:
                          type: string
                          enum:
                          - moon_sighted
                          - announced
                        status:
                          type: string
                          enum:
                          - estimated
                          - confirmed
                        scope:
                          type: string
                        source_url:
                          type:
                          - string
                          - 'null'
                        source_note:
                          type: string
                          description: When the official notice is not online, or the date is known from a press report of it
                        past:
                          type: boolean
                  announcements:
                    type: object
                    description: 'Per country in the list: who announces the dates'
                    additionalProperties:
                      type:
                      - object
                      - 'null'
                      properties:
                        authority:
                          type:
                          - string
                          - 'null'
                        channels:
                          type: array
                          items:
                            type: string
                        typical_notice_days:
                          type:
                          - string
                          - integer
                          - 'null'
                  notes:
                    type: array
                    items:
                      type: string
                  disclaimer:
                    type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '503':
          $ref: '#/components/responses/Unavailable'
        '403':
          description: Free plan (the holiday watch is in Developer, Pro and Compliance), or the key is paused for review
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/BulkLimited'
    servers:
    - url: https://api.africacompliancedata.com
  /v1/countries/{country}/holidays:
    get:
      tags:
      - Holidays and business days
      operationId: getPublicHolidays
      summary: Public holidays of a year
      description: 'National holidays with status: rule, confirmed, estimated (moon-sighted; a reviewer publishes the confirmed date once the announcement is verified, delays are possible), observed (weekend substitute) or bridge.'
      parameters:
      - $ref: '#/components/parameters/Country'
      - name: year
        in: query
        required: true
        schema:
          type: integer
          minimum: 2025
          maximum: 2030
        example: 2026
      - name: include_religious_scopes
        in: query
        required: false
        schema:
          type: boolean
        description: Also return holidays limited to one group (a faith, women, the public sector).
      responses:
        '200':
          description: Holidays
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/EnvelopeBase'
                - type: object
                  properties:
                    year:
                      type: integer
                    weekend:
                      type: array
                      items:
                        type: integer
                        description: ISO weekday, 1 = Monday
                    weekend_rule:
                      type: string
                    holidays:
                      type: array
                      items:
                        $ref: '#/components/schemas/Holiday'
                    notes:
                      type: array
                      items:
                        type: string
                    announcements:
                      type:
                      - object
                      - 'null'
                      additionalProperties: true
                      description: Who announces moon-sighted and ad-hoc holidays, and where
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '503':
          $ref: '#/components/responses/Unavailable'
        '403':
          $ref: '#/components/responses/Paused'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
    servers:
    - url: https://api.africacompliancedata.com
  /v1/countries/{country}/holidays.ics:
    get:
      tags:
      - Holidays and business days
      operationId: getHolidayCalendarFeed
      summary: Holidays as an iCalendar feed
      description: 'Subscribable calendar (RFC 5545): one all-day event per holiday. Estimated dates are TENTATIVE and keep the same UID, so subscribed calendars move them once a reviewer has verified the announced date (delays are possible). A free public feed of national holidays is also available without a key at https://africacompliancedata.com/calendar/{country}.ics (country code in either case).'
      parameters:
      - $ref: '#/components/parameters/Country'
      - name: from
        in: query
        schema:
          type: integer
          minimum: 2025
          maximum: 2030
        description: First year (default 2025).
      - name: to
        in: query
        schema:
          type: integer
          minimum: 2025
          maximum: 2030
        description: Last year (default 2030).
      - name: include_religious_scopes
        in: query
        schema:
          type: boolean
      responses:
        '200':
          description: iCalendar file
          content:
            text/calendar:
              schema:
                type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '503':
          $ref: '#/components/responses/Unavailable'
        '403':
          $ref: '#/components/responses/Paused'
        '404':
          description: Unknown country, or no verified holiday list for this country yet
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/RateLimited'
    servers:
    - url: https://api.africacompliancedata.com
  /v1/countries/{country}/is-business-day:
    get:
      tags:
      - Holidays and business days
      operationId: isBusinessDay
      summary: Is a date a working day?
      parameters:
      - $ref: '#/components/parameters/Country'
      - name: date
        in: query
        required: true
        schema:
          type: string
          format: date
        example: '2026-12-24'
      responses:
        '200':
          description: Answer
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/EnvelopeBase'
                - type: object
                  properties:
                    date:
                      type: string
                      format: date
                    business_day:
                      type: boolean
                    reason:
                      type:
                      - string
                      - 'null'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '503':
          $ref: '#/components/responses/Unavailable'
        '403':
          $ref: '#/components/responses/Paused'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
    servers:
    - url: https://api.africacompliancedata.com
  /v1/countries/{country}/business-days:
    get:
      tags:
      - Holidays and business days
      operationId: countBusinessDays
      summary: Working days between two dates (both included)
      parameters:
      - $ref: '#/components/parameters/Country'
      - name: from
        in: query
        required: true
        schema:
          type: string
          format: date
        example: '2026-12-01'
      - name: to
        in: query
        required: true
        schema:
          type: string
          format: date
        example: '2026-12-31'
      responses:
        '200':
          description: Count
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/EnvelopeBase'
                - type: object
                  properties:
                    from:
                      type: string
                      format: date
                    to:
                      type: string
                      format: date
                    inclusive:
                      type: boolean
                    business_days:
                      type: integer
                    holidays_in_range:
                      type: array
                      items:
                        type: object
                        properties:
                          date:
                            type: string
                            format: date
                          name:
                            type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '503':
          $ref: '#/components/responses/Unavailable'
        '403':
          $ref: '#/components/responses/Paused'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
    servers:
    - url: https://api.africacompliancedata.com
  /v1/countries/{country}/add-business-days:
    get:
      tags:
      - Holidays and business days
      operationId: addBusinessDays
      summary: The date N working days later (or earlier)
      parameters:
      - $ref: '#/components/parameters/Country'
      - name: date
        in: query
        required: true
        schema:
          type: string
          format: date
        example: '2026-12-24'
      - name: days
        in: query
        required: true
        schema:
          type: integer
          minimum: -1000
          maximum: 1000
        example: 5
      responses:
        '200':
          description: Result
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/EnvelopeBase'
                - type: object
                  properties:
                    start:
                      type: string
                      format: date
                    days:
                      type: integer
                    result:
                      type: string
                      format: date
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '503':
          $ref: '#/components/responses/Unavailable'
        '403':
          $ref: '#/components/responses/Paused'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
    servers:
    - url: https://api.africacompliancedata.com
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
      required:
      - error
    DataRevision:
      type: string
      description: 'Short commit id of the data the answer was built from (e.g. 928cb72b). dataset_version is the build date: the daily rebuild changes it with no data change, while data_revision changes only when the data does. Keep it with saved results to know exactly which data you used.'
      example: 928cb72b
    Coverage:
      type: string
      enum:
      - ready
      - partial
      - gap
    Holiday:
      type: object
      properties:
        date:
          type: string
          format: date
        name:
          type: string
        rule_id:
          type:
          - string
          - 'null'
          description: Absent for ad-hoc days off
        status:
          type: string
          enum:
          - rule
          - confirmed
          - estimated
          - observed
          - bridge
        scope:
          type: string
          description: national, or the group a holiday is limited to
        observed_for:
          type: string
          format: date
          description: 'For a substitute day: the date of the holiday it replaces'
        moved_from:
          type: string
          format: date
          description: Original date of a holiday officially moved
        bridge_for:
          type: string
          format: date
          description: 'For a bridge day: the holiday it bridges to'
        estimated:
          type: boolean
          description: 'true on a weekend substitute of an estimated (moon-sighted) date: it moves with the announced date'
        source_url:
          type:
          - string
          - 'null'
          description: Official announcement (confirmed dates); null when the official text is not online (source_note says where it was published)
        source_note:
          type: string
          description: Where the announcement was made when it is not published online, or that the date is known from a press report of the official announcement
    EnvelopeBase:
      type: object
      properties:
        country:
          type: string
        country_name:
          type: string
        coverage:
          $ref: '#/components/schemas/Coverage'
        warning:
          type: string
          description: When coverage is partial or gap, the year's holiday list is incomplete, or no value can be given
        sources:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/Source'
        dataset_version:
          type: string
        data_revision:
          $ref: '#/components/schemas/DataRevision'
        disclaimer:
          type: string
      required:
      - country
      - coverage
      - sources
      - dataset_version
      - disclaimer
    Source:
      type: object
      properties:
        url:
          type:
          - string
          - 'null'
          description: null when the official text is not available online; 'note' then explains it
        note:
          type: string
          description: Present when url is null
        legal_basis:
          type: string
        source_type:
          type: string
          description: e.g. statute, gazette, revenue_authority; 'secondary' when no official text has been confirmed
        effective_date:
          type:
          - string
          - 'null'
        confidence:
          type: string
          enum:
          - high
          - medium
          - low
        last_verified:
          type: string
          format: date
  responses:
    Paused:
      description: Key paused for review after unusual bulk access ('Access paused')
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Missing or invalid parameter
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: 'Monthly quota reached (until 00:00 UTC on the 1st; X-Quota-Limit and X-Quota-Remaining: 0), rate limit for the plan exceeded, or key checks busy (many new keys from your network); see Retry-After'
      headers:
        Retry-After:
          schema:
            type: integer
        X-Quota-Limit:
          schema:
            type: integer
        X-Quota-Remaining:
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Unknown country, path or webhook id
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unavailable:
      description: Key check temporarily unavailable, or webhook storage unavailable (webhook endpoints); retry after Retry-After seconds
      headers:
        Retry-After:
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BulkLimited:
      description: Monthly quota reached, plan rate limit exceeded, or the shared limit of 5 requests per minute for full country profiles and the holiday watch, or key checks busy (many new keys from your network); see Retry-After
      headers:
        Retry-After:
          schema:
            type: integer
        X-Quota-Limit:
          schema:
            type: integer
        X-Quota-Remaining:
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    Country:
      name: country
      in: path
      required: true
      description: ISO 3166-1 alpha-2 code, e.g. KE, NG, ZA.
      schema:
        type: string
        pattern: ^[A-Za-z]{2}$
      example: KE
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: x-api-key
    Bearer:
      type: http
      scheme: bearer
      description: The same API key as a bearer token.
x-refined-from:
- africacompliancedata-com-openapi.json
- africacompliancedata-com.json