openapi: 3.1.0
info:
  title: "Dr. Amit Puri Public API (amitpuri)"
  version: "1.0.0"
  description: >
    Official public REST API, developer resources, and agent tools for Dr. Amit Puri (amitpuri).
    Provides structured programmatic endpoints for executive bio, advisory services, publications,
    health checks, and deprecation policies. Official developer resources for amitpuri include
    OpenAPI 3.1.0 specifications, authentication guides, webhooks, Model Context Protocol (MCP) server,
    CLI tools, and LLM context files.
  contact:
    name: Dr. Amit Puri
    email: info@amitpuri.com
    url: https://www.amitpuri.com/developers
  license:
    name: CC BY 4.0
    url: https://creativecommons.org/licenses/by/4.0/
  x-api-version: "1.0.0"
  x-versioning-strategy: >
    URL path versioning (/v1/, /v2/) and API-Version header parameter. The current stable release is v1,
    available under /api/v1/* and aliased at /api/*.
  x-deprecation-policy: >
    Deprecated endpoints will carry a Sunset header (RFC 8594) indicating the removal date
    and a Deprecation header (RFC 9745) with a deprecation timestamp. Deprecation policy page is published
    at https://www.amitpuri.com/deprecation with a minimum 90-day transition notice.
  x-rate-limit-policy: >
    60 requests per minute per IP. Requests exceeding the limit receive a 429 Too Many Requests response
    with a Retry-After header. Headers RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, and RateLimit-Policy
    are returned on all API responses.
  x-developer-resources:
    developer-portal: https://www.amitpuri.com/developers
    openapi-json: https://www.amitpuri.com/openapi.json
    openapi-yaml: https://www.amitpuri.com/openapi.yaml
    auth-docs: https://www.amitpuri.com/developers#auth
    webhooks-docs: https://www.amitpuri.com/developers#webhooks
    mcp-server: https://www.amitpuri.com/developers#mcp
    mcp-manifest: https://www.amitpuri.com/.well-known/mcp.json
    cli-tool: "npx @amitpuri/cli"
    deprecation-policy: https://www.amitpuri.com/deprecation
    llms-txt: https://www.amitpuri.com/llms.txt
    agent-instructions: https://www.amitpuri.com/agent-instructions.md

servers:
  - url: https://www.amitpuri.com/api/v1
    description: Versioned Production Server (v1 — current stable)
  - url: https://www.amitpuri.com/api
    description: Production Server (latest stable v1 aliased)
  - url: https://www.amitpuri.com
    description: Root Server

components:
  parameters:
    ApiVersionHeader:
      name: API-Version
      in: header
      description: "API version string (e.g. 'v1'). Defaults to latest stable version (v1)."
      required: false
      schema:
        type: string
        default: "v1"
        enum:
          - "v1"
          - "1.0.0"
    XApiVersionHeader:
      name: X-API-Version
      in: header
      description: "Custom API version header."
      required: false
      schema:
        type: string
        default: "1.0.0"
    FormatQuery:
      name: format
      in: query
      description: "Desired response representation format. Defaults to 'json'."
      required: false
      schema:
        type: string
        default: json
        enum:
          - json

  schemas:
    Problem:
      type: object
      description: RFC 9457 application/problem+json error model. Returned on all 4xx and 5xx responses.
      properties:
        type:
          type: string
          format: uri
          description: A URI reference that identifies the problem type.
          example: https://www.amitpuri.com/api/errors/not-found
        title:
          type: string
          description: A short, human-readable summary of the problem type.
          example: Not Found
        status:
          type: integer
          description: The HTTP status code.
          example: 404
        detail:
          type: string
          description: A human-readable explanation specific to this occurrence of the problem.
          example: The requested resource was not found.
        instance:
          type: string
          format: uri
          description: A URI reference that identifies the specific occurrence of the problem.
          example: /api/nonexistent
        code:
          type: string
          description: A unique, machine-readable error code for programmatic handling.
          example: API_ENDPOINT_NOT_FOUND
        invalid_params:
          type: array
          description: If applicable, a list of invalid parameters causing the error.
          items:
            type: object
            properties:
              name:
                type: string
                description: Parameter name
              reason:
                type: string
                description: Reason parameter is invalid
            required:
              - name
              - reason
      required:
        - type
        - title
        - status
        - detail
        - instance
        - code

    Error:
      $ref: '#/components/schemas/Problem'

    SocialLinks:
      type: object
      description: Verified social profiles for Dr. Amit Puri
      properties:
        twitter:
          type: string
          format: uri
          description: Twitter/X handle URL
          example: https://twitter.com/iamamitpuri
        github:
          type: string
          format: uri
          description: GitHub profile URL
          example: https://github.com/amitpuri
        linkedin:
          type: string
          format: uri
          description: LinkedIn profile URL
          example: https://linkedin.com/in/amitpuri

    Profile:
      type: object
      description: Executive profile and professional bio for Dr. Amit Puri
      properties:
        name:
          type: string
          example: Dr. Amit Puri
          description: Full professional name
        title:
          type: string
          example: Enterprise Cloud & AI Architect, Author, Advisor
          description: Professional title and primary advisory roles
        bio:
          type: string
          description: Executive biography summarizing 25+ years experience in enterprise architecture and AI transformation
          example: Executive Cloud & AI Architect, Author, and Advisor helping organizations modernize enterprise architectures with AI.
        email:
          type: string
          format: email
          example: info@amitpuri.com
          description: Primary verified contact email
        website:
          type: string
          format: uri
          example: https://www.amitpuri.com
          description: Official website URL
        booking_url:
          type: string
          format: uri
          example: https://topmate.io/amitpuri
          description: Direct Topmate booking hub URL
        social:
          $ref: '#/components/schemas/SocialLinks'
        expertise:
          type: array
          description: List of core subject matter expertise and advisory domains
          items:
            type: string
          example:
            - Enterprise Cloud Architecture
            - AI Transformation
            - Citizen Development
            - Design Patterns
        experience_years:
          type: integer
          example: 25
          description: Total cumulative years of professional technology experience
      required:
        - name
        - title
        - bio
        - email
        - website
        - booking_url
        - expertise
        - experience_years

    ServiceItem:
      type: object
      description: Individual advisory or mentorship offering
      properties:
        id:
          type: string
          description: Unique service identifier
          example: ai-transformation-advice
        title:
          type: string
          description: Service title
          example: AI Transformation Advice
        type:
          type: string
          description: Engagement type (e.g. Advisory, Mentorship, Strategy)
          example: Advisory
        description:
          type: string
          description: Summary of what is covered in the session
          example: Expert consultation on enterprise AI strategy and multi-agent implementation.
        booking_url:
          type: string
          format: uri
          description: Direct Topmate URL to book this specific session
          example: https://topmate.io/amitpuri/858803
      required:
        - id
        - title
        - type
        - description
        - booking_url

    ServicesResponse:
      type: object
      description: Catalog of advisory services and booking URLs for Dr. Amit Puri
      properties:
        provider:
          type: string
          example: Dr. Amit Puri (amitpuri)
          description: Provider name
        booking_hub:
          type: string
          format: uri
          example: https://topmate.io/amitpuri
          description: Canonical booking hub URL
        services:
          type: array
          description: List of available consultation offerings
          items:
            $ref: '#/components/schemas/ServiceItem'
      required:
        - provider
        - booking_hub
        - services

    ProjectItem:
      type: object
      description: Initiative or open publication item
      properties:
        id:
          type: string
          description: Unique initiative identifier
          example: openagi
        name:
          type: string
          description: Initiative title
          example: Open AGI
        tagline:
          type: string
          description: Key focus or mission statement
          example: Democratizing Artificial General Intelligence and Agentic Architectures
        url:
          type: string
          format: uri
          description: Canonical project URL
          example: https://www.amitpuri.com/openagi
        category:
          type: string
          description: Focus domain
          example: AI & Agentic Systems
      required:
        - id
        - name
        - tagline
        - url
        - category

    ProjectsResponse:
      type: object
      description: Portfolio of key initiatives, research publications, and open platforms
      properties:
        provider:
          type: string
          example: Dr. Amit Puri (amitpuri)
          description: Provider name
        initiatives:
          type: array
          description: List of published initiatives and knowledge bases
          items:
            $ref: '#/components/schemas/ProjectItem'
      required:
        - provider
        - initiatives

    HealthResponse:
      type: object
      description: API health check, active versioning, and documentation index
      properties:
        status:
          type: string
          example: healthy
          description: Service operational status
        service:
          type: string
          example: amitpuri.com Public API
          description: Service name
        version:
          type: string
          example: 1.0.0
          description: Semantic version
        api_version:
          type: string
          example: v1
          description: Active API path version
        timestamp:
          type: string
          description: ISO 8601 status timestamp
          example: 2026-08-22T00:00:00Z
        docs:
          type: string
          format: uri
          example: https://www.amitpuri.com/openapi.json
          description: OpenAPI specification URL
        developer_portal:
          type: string
          format: uri
          example: https://www.amitpuri.com/developers
          description: Developer portal URL
      required:
        - status
        - service
        - version
        - api_version

    DeprecationPolicy:
      type: object
      description: Detailed deprecation signaling standards and timeline guarantees
      properties:
        minimum_notice_days:
          type: integer
          example: 90
          description: Minimum advance notice period in days before removing a deprecated endpoint
        sunset_header:
          type: string
          example: Sunset (RFC 8594)
          description: Header communicating endpoint retirement date
        deprecation_header:
          type: string
          example: Deprecation (RFC 9745)
          description: Header communicating deprecation effective timestamp
        link_header:
          type: string
          example: Link (RFC 8288) rel="deprecation"
          description: Link header pointing to successor documentation
        policy_url:
          type: string
          format: uri
          example: https://www.amitpuri.com/deprecation
          description: Canonical HTML deprecation policy page
        markdown_policy_url:
          type: string
          format: uri
          example: https://www.amitpuri.com/deprecation.md
          description: Markdown deprecation policy URL
        developer_portal:
          type: string
          format: uri
          example: https://www.amitpuri.com/developers
          description: Developer portal URL
        openapi_spec:
          type: string
          format: uri
          example: https://www.amitpuri.com/openapi.json
          description: OpenAPI spec URL
      required:
        - minimum_notice_days
        - sunset_header
        - deprecation_header
        - policy_url
        - developer_portal
        - openapi_spec

    DeprecationResponse:
      type: object
      description: API Versioning and Deprecation Policy response payload
      properties:
        service:
          type: string
          example: Dr. Amit Puri Public API (amitpuri)
          description: Service name
        active_version:
          type: string
          example: v1
          description: Current active major API release
        versioning_strategy:
          type: string
          example: URL path versioning (/v1/, /v2/) and API-Version header parameter.
          description: Strategy description
        deprecation_policy:
          $ref: '#/components/schemas/DeprecationPolicy'
      required:
        - service
        - active_version
        - versioning_strategy
        - deprecation_policy

  headers:
    RateLimit-Limit:
      description: Maximum number of requests allowed per 60-second window.
      schema:
        type: integer
        example: 60
    RateLimit-Remaining:
      description: Number of requests remaining in the current window.
      schema:
        type: integer
        example: 59
    RateLimit-Reset:
      description: Seconds or timestamp until the rate-limit window resets.
      schema:
        type: integer
        example: 0
    RateLimit-Policy:
      description: "Rate limit policy specification (quota;w=window_seconds)."
      schema:
        type: string
        example: "60;w=60"
    Retry-After:
      description: Number of seconds to wait before retrying a rate-limited request.
      schema:
        type: integer
        example: 60
    API-Version:
      description: Current active API version string.
      schema:
        type: string
        example: "v1"
    Sunset:
      description: RFC 8594 Sunset date when a deprecated endpoint will be removed.
      schema:
        type: string
        example: "Wed, 11 Nov 2026 00:00:00 GMT"
    Deprecation:
      description: RFC 9745 Deprecation date when an endpoint was marked deprecated.
      schema:
        type: string
        example: "@1762819200"

  responses:
    BadRequest:
      description: Bad Request (RFC 9457). The request parameters were malformed or invalid.
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://www.amitpuri.com/api/errors/bad-request
            title: Bad Request
            status: 400
            detail: The request parameters were invalid.
            instance: /api/profile.json
            code: BAD_REQUEST
        application/json:
          schema:
            $ref: '#/components/schemas/Problem'

    Unauthorized:
      description: Unauthorized (RFC 9457). Valid Bearer Token required for private or webhook endpoints.
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://www.amitpuri.com/api/errors/unauthorized
            title: Unauthorized
            status: 401
            detail: Authentication required. Provide a valid Bearer Token.
            instance: /api/private
            code: UNAUTHORIZED
        application/json:
          schema:
            $ref: '#/components/schemas/Problem'

    Forbidden:
      description: Forbidden (RFC 9457). The authenticated user or agent does not have access to this resource.
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://www.amitpuri.com/api/errors/forbidden
            title: Forbidden
            status: 403
            detail: Access to the requested resource is denied.
            instance: /api/restricted
            code: FORBIDDEN
        application/json:
          schema:
            $ref: '#/components/schemas/Problem'

    NotFound:
      description: Resource Not Found (RFC 9457).
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://www.amitpuri.com/api/errors/not-found
            title: Not Found
            status: 404
            detail: The requested API endpoint does not exist on amitpuri.com.
            instance: /api/nonexistent
            code: API_ENDPOINT_NOT_FOUND
        application/json:
          schema:
            $ref: '#/components/schemas/Problem'

    TooManyRequests:
      description: Rate Limit Exceeded (RFC 9457). Self-throttle using Retry-After header.
      headers:
        Retry-After:
          $ref: '#/components/headers/Retry-After'
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimit-Policy'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://www.amitpuri.com/api/errors/rate-limit-exceeded
            title: Too Many Requests
            status: 429
            detail: Rate limit of 60 requests per minute exceeded. Please self-throttle.
            instance: /api/health.json
            code: RATE_LIMIT_EXCEEDED
        application/json:
          schema:
            $ref: '#/components/schemas/Problem'

    InternalServerError:
      description: Internal Server Error (RFC 9457).
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://www.amitpuri.com/api/errors/internal-server-error
            title: Internal Server Error
            status: 500
            detail: An unexpected error occurred. Please contact info@amitpuri.com.
            instance: /api/health.json
            code: INTERNAL_SERVER_ERROR
        application/json:
          schema:
            $ref: '#/components/schemas/Problem'

    DefaultError:
      description: Default unexpected error response (RFC 9457).
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
        application/json:
          schema:
            $ref: '#/components/schemas/Problem'

paths:
  /api/profile.json:
    get:
      summary: Get Profile & Bio (Dr. Amit Puri)
      description: Retrieves verified professional biography, titles, social media channels, expertise domains, and booking coordinates for Dr. Amit Puri (amitpuri). Suitable for agent tool calls and entity resolution.
      operationId: getProfile
      parameters:
        - $ref: '#/components/parameters/ApiVersionHeader'
        - $ref: '#/components/parameters/FormatQuery'
        - name: fields
          in: query
          description: Optional comma-separated list of profile fields to retrieve (e.g. 'name,title,bio,expertise,booking_url').
          required: false
          schema:
            type: string
            example: name,title,bio,booking_url
      responses:
        '200':
          description: Successful profile response
          headers:
            API-Version:
              $ref: '#/components/headers/API-Version'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Profile'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        default:
          $ref: '#/components/responses/DefaultError'

  /api/v1/profile.json:
    get:
      summary: Get Profile & Bio (v1 Stable)
      description: Versioned endpoint returning executive bio, contact endpoints, and expertise for Dr. Amit Puri (amitpuri).
      operationId: getProfileV1
      parameters:
        - $ref: '#/components/parameters/FormatQuery'
        - name: fields
          in: query
          description: Optional comma-separated list of profile fields to retrieve.
          required: false
          schema:
            type: string
            example: name,title,bio,booking_url
      responses:
        '200':
          description: Successful profile response
          headers:
            API-Version:
              $ref: '#/components/headers/API-Version'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Profile'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        default:
          $ref: '#/components/responses/DefaultError'

  /api/services.json:
    get:
      summary: List Advisory Services & Bookings
      description: Returns full catalog of advisory sessions, 1:1 mentorship bookings, workshops, and direct Topmate booking URLs for Dr. Amit Puri (amitpuri).
      operationId: getServices
      parameters:
        - $ref: '#/components/parameters/ApiVersionHeader'
        - $ref: '#/components/parameters/FormatQuery'
        - name: category
          in: query
          description: Filter services by category type (e.g. 'all', 'advisory', 'mentorship', 'cloud', 'ai').
          required: false
          schema:
            type: string
            default: all
            enum:
              - all
              - advisory
              - mentorship
              - cloud
              - ai
      responses:
        '200':
          description: List of advisory offerings
          headers:
            API-Version:
              $ref: '#/components/headers/API-Version'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServicesResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        default:
          $ref: '#/components/responses/DefaultError'

  /api/v1/services.json:
    get:
      summary: List Advisory Services (v1 Stable)
      description: Versioned endpoint returning advisory catalog and booking URLs for Dr. Amit Puri.
      operationId: getServicesV1
      parameters:
        - $ref: '#/components/parameters/FormatQuery'
        - name: category
          in: query
          description: Filter services by category type.
          required: false
          schema:
            type: string
            default: all
            enum:
              - all
              - advisory
              - mentorship
              - cloud
              - ai
      responses:
        '200':
          description: List of advisory offerings
          headers:
            API-Version:
              $ref: '#/components/headers/API-Version'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServicesResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        default:
          $ref: '#/components/responses/DefaultError'

  /api/projects.json:
    get:
      summary: List Key Initiatives & Portfolios
      description: Returns open initiatives, research knowledge bases (Open AGI, Citizen Developer, Open Cloud, designpattern.fyi), and published books for Dr. Amit Puri (amitpuri).
      operationId: getProjects
      parameters:
        - $ref: '#/components/parameters/ApiVersionHeader'
        - $ref: '#/components/parameters/FormatQuery'
        - name: category
          in: query
          description: Filter initiatives by category (e.g. 'all', 'ai', 'governance', 'cloud', 'patterns').
          required: false
          schema:
            type: string
            default: all
            enum:
              - all
              - ai
              - governance
              - cloud
              - patterns
      responses:
        '200':
          description: List of initiatives
          headers:
            API-Version:
              $ref: '#/components/headers/API-Version'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        default:
          $ref: '#/components/responses/DefaultError'

  /api/v1/projects.json:
    get:
      summary: List Key Initiatives (v1 Stable)
      description: Versioned endpoint returning portfolio initiatives and publications for Dr. Amit Puri.
      operationId: getProjectsV1
      parameters:
        - $ref: '#/components/parameters/FormatQuery'
        - name: category
          in: query
          description: Filter initiatives by category.
          required: false
          schema:
            type: string
            default: all
            enum:
              - all
              - ai
              - governance
              - cloud
              - patterns
      responses:
        '200':
          description: List of initiatives
          headers:
            API-Version:
              $ref: '#/components/headers/API-Version'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        default:
          $ref: '#/components/responses/DefaultError'

  /api/health.json:
    get:
      summary: API Service Health Check
      description: Returns operational health status, active API version, timestamp, and developer resource links for amitpuri.com.
      operationId: getHealth
      parameters:
        - $ref: '#/components/parameters/ApiVersionHeader'
        - $ref: '#/components/parameters/FormatQuery'
        - name: check
          in: query
          description: Optional component check identifier (e.g. 'all', 'ping', 'version').
          required: false
          schema:
            type: string
            default: all
            enum:
              - all
              - ping
              - version
      responses:
        '200':
          description: Service health status
          headers:
            API-Version:
              $ref: '#/components/headers/API-Version'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HealthResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        default:
          $ref: '#/components/responses/DefaultError'

  /api/v1/health.json:
    get:
      summary: API Health Check (v1 Stable)
      description: Versioned endpoint returning API operational health and version metadata.
      operationId: getHealthV1
      parameters:
        - $ref: '#/components/parameters/FormatQuery'
        - name: check
          in: query
          description: Optional component check identifier.
          required: false
          schema:
            type: string
            default: all
            enum:
              - all
              - ping
              - version
      responses:
        '200':
          description: Service health status
          headers:
            API-Version:
              $ref: '#/components/headers/API-Version'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HealthResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        default:
          $ref: '#/components/responses/DefaultError'

  /api/deprecation.json:
    get:
      summary: API Versioning & Deprecation Policy
      description: Retrieves official semantic versioning roadmap, Sunset/Deprecation header specifications, and 90-day grace period policies for amitpuri APIs.
      operationId: getDeprecationPolicy
      parameters:
        - $ref: '#/components/parameters/ApiVersionHeader'
        - $ref: '#/components/parameters/FormatQuery'
      responses:
        '200':
          description: Versioning and deprecation policy document
          headers:
            API-Version:
              $ref: '#/components/headers/API-Version'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeprecationResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        default:
          $ref: '#/components/responses/DefaultError'

  /api/v1/deprecation.json:
    get:
      summary: API Versioning & Deprecation Policy (v1 Stable)
      description: Versioned endpoint returning API deprecation and version lifecycle policies for Dr. Amit Puri.
      operationId: getDeprecationPolicyV1
      parameters:
        - $ref: '#/components/parameters/FormatQuery'
      responses:
        '200':
          description: Versioning and deprecation policy document
          headers:
            API-Version:
              $ref: '#/components/headers/API-Version'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeprecationResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        default:
          $ref: '#/components/responses/DefaultError'

  /api/404.json:
    get:
      summary: RFC 9457 API Not Found Error Demonstration
      description: Demonstration error endpoint returning an RFC 9457 Problem Details error payload with machine-readable error codes.
      operationId: getApiNotFound
      parameters:
        - $ref: '#/components/parameters/FormatQuery'
      responses:
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        default:
          $ref: '#/components/responses/DefaultError'

  /llms.txt:
    get:
      summary: LLM Context Guidance File
      description: Standardized llmstxt.org markdown guidance file for AI agents, multi-agent systems, and LLMs.
      operationId: getLlmsTxt
      parameters:
        - name: Accept
          in: header
          description: Requested media type (e.g. text/plain).
          required: false
          schema:
            type: string
            default: text/plain
      responses:
        '200':
          description: Raw text/plain llms.txt content
          content:
            text/plain:
              schema:
                type: string
                description: UTF-8 Markdown text per llmstxt.org specification
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        default:
          $ref: '#/components/responses/DefaultError'
