{
  "openapi": "3.1.0",
  "info": {
    "title": "Omar Abobakr — Videographer & Video Editor Public Agent API",
    "version": "1.0.0",
    "summary": "Public read-only REST API, MCP Server, and A2A Agent interface for Omar Abobakr (https://omarabobakr.com).",
    "description": "Provides machine-readable access to Omar Abobakr's verified professional profile, videography and video editing services, published portfolio works, interactive CMS price calculator, and project inquiry preparation.",
    "contact": {
      "name": "Omar Abobakr",
      "url": "https://omarabobakr.com/",
      "email": "omar.abobakr.films@gmail.com"
    }
  },
  "servers": [
    {
      "url": "https://omarabobakr.com",
      "description": "Production Server"
    }
  ],
  "paths": {
    "/api/v1/health": {
      "get": {
        "operationId": "get_api_health",
        "summary": "Check API and Agent Readiness Health Status",
        "responses": {
          "200": {
            "description": "Healthy status response"
          }
        }
      }
    },
    "/api/v1/profile": {
      "get": {
        "operationId": "get_business_profile",
        "summary": "Tool 1: Get Omar Abobakr's verified business profile, specialties, skills, and contact links",
        "responses": {
          "200": {
            "description": "Business profile object"
          }
        }
      }
    },
    "/api/v1/services": {
      "get": {
        "operationId": "list_services",
        "summary": "Tool 2: List all active videography and video editing services",
        "parameters": [
          {
            "name": "category",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Optional keyword filter (e.g., event, editing, reels, promotional)"
          }
        ],
        "responses": {
          "200": {
            "description": "List of services"
          }
        }
      }
    },
    "/api/v1/services/{service_id}": {
      "get": {
        "operationId": "get_service_details",
        "summary": "Tool 3: Get complete details for a specific service by ID or name",
        "parameters": [
          {
            "name": "service_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Service ID (srv-1, srv-2, srv-3, srv-4)"
          }
        ],
        "responses": {
          "200": {
            "description": "Service details"
          },
          "404": {
            "description": "Service not found"
          }
        }
      }
    },
    "/api/v1/projects": {
      "get": {
        "operationId": "list_portfolio_projects",
        "summary": "Tool 4: List verified published portfolio projects (excluding demo placeholders)",
        "parameters": [
          {
            "name": "category",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Optional category filter (Commercial, Events, Reels, Products, Cinematic)"
          }
        ],
        "responses": {
          "200": {
            "description": "List of verified published projects"
          }
        }
      }
    },
    "/api/v1/projects/{project_id}": {
      "get": {
        "operationId": "get_project_details",
        "summary": "Tool 5: Get full details of a published portfolio project",
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Project details"
          },
          "404": {
            "description": "Project not found"
          }
        }
      }
    },
    "/api/v1/estimate": {
      "get": {
        "operationId": "estimate_project_price_get",
        "summary": "Tool 6 (GET): Calculate a non-binding project price estimate using CMS calculator rules",
        "parameters": [
          {
            "name": "service_type",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "reels",
                "youtube",
                "podcast"
              ]
            }
          },
          {
            "name": "quantity",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "duration_minutes",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "tier",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rush_delivery",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Itemized non-binding price estimate"
          },
          "400": {
            "description": "Invalid parameters"
          }
        }
      },
      "post": {
        "operationId": "estimate_project_price",
        "summary": "Tool 6 (POST): Calculate a non-binding project price estimate using CMS calculator rules",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "service_type": {
                    "type": "string",
                    "enum": [
                      "reels",
                      "youtube",
                      "podcast"
                    ],
                    "description": "Package category: 'reels' (Short-form vertical videos), 'youtube' (Long-form horizontal videos), or 'podcast' (Multi-cam or single-cam podcast episodes)."
                  },
                  "quantity": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 30,
                    "description": "Number of videos or episodes (1-30). Note: 10+ reels automatically unlock the 10% bulk discount."
                  },
                  "duration_minutes": {
                    "type": "number",
                    "minimum": 1,
                    "maximum": 240,
                    "description": "Duration per video/episode in minutes (used for 'youtube' and 'podcast')."
                  },
                  "tier": {
                    "type": "string",
                    "description": "Editing complexity tier. For 'reels': 'basic', 'dynamic', or 'motion'. For 'youtube': 'standard', 'dynamic', or 'cinematic'. For 'podcast': 'single' or 'multicam'."
                  },
                  "rush_delivery": {
                    "type": "boolean",
                    "description": "Whether priority 24-48h rush delivery (+25%) is requested."
                  },
                  "addons": {
                    "type": "object",
                    "description": "Optional package add-ons.",
                    "properties": {
                      "reelHook": {
                        "type": "boolean",
                        "description": "Script & Viral Hook Optimization (+$10/reel)"
                      },
                      "reelThumb": {
                        "type": "boolean",
                        "description": "Custom Cover / Thumbnail (+$8/reel)"
                      },
                      "ytThumb": {
                        "type": "boolean",
                        "description": "Custom High-CTR YouTube Thumbnail (+$20/video)"
                      },
                      "ytShorts": {
                        "type": "boolean",
                        "description": "Extract 3 Vertical Shorts from YouTube Video (+$50/video)"
                      },
                      "podClips": {
                        "type": "boolean",
                        "description": "Extract 5 Viral Reels/Shorts from Podcast (+$75/episode)"
                      },
                      "podBranding": {
                        "type": "boolean",
                        "description": "Intro/Outro Branding + Chapters + Thumbnail (+$25/episode)"
                      },
                      "rushDelivery": {
                        "type": "boolean",
                        "description": "Priority 24-48h Rush Delivery (+25%)"
                      }
                    }
                  }
                },
                "required": [
                  "service_type"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Itemized non-binding price estimate"
          },
          "400": {
            "description": "Invalid parameters"
          }
        }
      }
    },
    "/api/v1/contact": {
      "get": {
        "operationId": "get_contact_options",
        "summary": "Tool 7: Get verified WhatsApp, Email, and Instagram contact channels",
        "responses": {
          "200": {
            "description": "Contact options"
          }
        }
      }
    },
    "/api/v1/inquiry": {
      "post": {
        "operationId": "prepare_project_inquiry",
        "summary": "Tool 8: Prepare a structured project inquiry and user-clickable WhatsApp/Email links",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "client_name": {
                    "type": "string",
                    "description": "Optional name of the client or brand."
                  },
                  "service_type": {
                    "type": "string",
                    "description": "Type of service needed (e.g., 'Social Media Reels', 'Event Videography', 'YouTube Video Editing', 'Promotional Video')."
                  },
                  "project_description": {
                    "type": "string",
                    "description": "Brief description of the project scope, deliverables, or creative vision."
                  },
                  "budget": {
                    "type": "string",
                    "description": "Optional estimated budget (e.g., '$250', '12,000 EGP')."
                  },
                  "timeline": {
                    "type": "string",
                    "description": "Optional target delivery timeline or filming date."
                  },
                  "preferred_contact_method": {
                    "type": "string",
                    "enum": [
                      "WhatsApp",
                      "Email",
                      "Instagram"
                    ],
                    "description": "Preferred channel for follow-up."
                  }
                },
                "required": [
                  "service_type",
                  "project_description"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Prepared inquiry draft and links"
          },
          "400": {
            "description": "Missing required fields"
          }
        }
      }
    },
    "/mcp": {
      "post": {
        "operationId": "mcp_streamable_http",
        "summary": "Model Context Protocol (MCP 2025-06-18) Streamable HTTP JSON-RPC 2.0 Endpoint",
        "responses": {
          "200": {
            "description": "JSON-RPC 2.0 response"
          },
          "202": {
            "description": "JSON-RPC notification accepted"
          }
        }
      }
    },
    "/a2a": {
      "post": {
        "operationId": "a2a_jsonrpc",
        "summary": "Agent-to-Agent (A2A v1.0) JSON-RPC 2.0 Endpoint",
        "responses": {
          "200": {
            "description": "A2A Task response"
          }
        }
      }
    }
  }
}
