{
  "openapi": "3.1.0",
  "info": {
    "title": "ProvenDay API",
    "version": "0.1.2",
    "description": "Explainable business-day and settlement calculations. Public beta."
  },
  "servers": [
    {
      "url": "https://provenday.com"
    }
  ],
  "paths": {
    "/v1/health": {
      "get": {
        "operationId": "getHealth",
        "summary": "Service and source-monitor health",
        "responses": {
          "200": {
            "description": "Health response"
          }
        }
      }
    },
    "/v1/calendars": {
      "get": {
        "operationId": "listCalendars",
        "summary": "List verified calendars",
        "responses": {
          "200": {
            "description": "Calendar list"
          }
        }
      }
    },
    "/v1/holidays": {
      "get": {
        "operationId": "listHolidays",
        "summary": "List a complete verified calendar year",
        "parameters": [
          {
            "name": "calendar",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "year",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Holiday list"
          },
          "422": {
            "description": "Outside verified coverage"
          }
        }
      }
    },
    "/v1/is-business-day": {
      "get": {
        "operationId": "isBusinessDay",
        "summary": "Classify a date",
        "parameters": [
          {
            "name": "date",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "calendars",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Comma-separated calendar IDs"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Classification and evidence"
          }
        }
      }
    },
    "/v1/add-business-days": {
      "get": {
        "operationId": "addBusinessDays",
        "summary": "Add or subtract business days",
        "parameters": [
          {
            "name": "date",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "days",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": -3660,
              "maximum": 3660
            }
          },
          {
            "name": "calendars",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Calculated date and trace"
          }
        }
      }
    },
    "/v1/settlement": {
      "get": {
        "operationId": "settlementDate",
        "summary": "Calculate a supported settlement date",
        "parameters": [
          {
            "name": "tradeDate",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "convention",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "example": "US_EQUITIES"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Settlement date, rule version, trace, and sources"
          },
          "422": {
            "description": "Non-trade day or outside coverage"
          }
        }
      }
    }
  }
}
