{
    "openapi": "3.1.1",
    "info": {
        "title": "ShipAhead Public Tools API",
        "version": "1.0.0",
        "description": "The three free AI tools hosted on shipahe.ad. ShipAhead sells a Nuxt source-code starter kit, not a hosted account or storage API. OAuth and scoped permissions documented for the template are not services on this domain. Checkout and administrative webhooks are outside this public tool surface.",
        "contact": {
            "name": "ShipAhead Support",
            "email": "hello@shipahe.ad",
            "url": "https://shipahe.ad/contact"
        }
    },
    "servers": [
        {
            "url": "https://shipahe.ad",
            "description": "Public website; no isolated hosted sandbox."
        }
    ],
    "security": [],
    "externalDocs": {
        "description": "ShipAhead developer guide",
        "url": "https://shipahe.ad/developers"
    },
    "paths": {
        "/api/generate/saas-idea": {
            "post": {
                "operationId": "generateSaasIdeas",
                "summary": "Generate SaaS ideas",
                "description": "Generate SaaS ideas. Public tool requiring no authentication. AI-generated fields are model output, not schema-validated guarantees. Inspect HTTP 200 bodies for provider throttling. Avoid bulk requests; no fixed public quota is published.",
                "security": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SaasIdeaInput"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Generated result or provider throttling message. Output fields describe the requested AI format.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "oneOf": [
                                        {
                                            "type": "object",
                                            "properties": {
                                                "data": {
                                                    "$ref": "#/components/schemas/SaasIdeas"
                                                }
                                            },
                                            "required": [
                                                "data"
                                            ]
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "description": "Provider throttling message."
                                                }
                                            },
                                            "required": [
                                                "error"
                                            ]
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid request body.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    },
                    "500": {
                        "description": "Provider, configuration, or model-output parsing failure.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/generate/privacy-policy": {
            "post": {
                "operationId": "generatePrivacyPolicy",
                "summary": "Draft a privacy policy",
                "description": "Draft a privacy policy. Public tool requiring no authentication. AI-generated fields are model output, not schema-validated guarantees. Inspect HTTP 200 bodies for provider throttling. Avoid bulk requests; no fixed public quota is published.",
                "security": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/PrivacyPolicyInput"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Generated result or provider throttling message. Output fields describe the requested AI format.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "oneOf": [
                                        {
                                            "type": "object",
                                            "properties": {
                                                "data": {
                                                    "$ref": "#/components/schemas/PrivacyPolicy"
                                                }
                                            },
                                            "required": [
                                                "data"
                                            ]
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "description": "Provider throttling message."
                                                }
                                            },
                                            "required": [
                                                "error"
                                            ]
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid request body.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    },
                    "500": {
                        "description": "Provider, configuration, or model-output parsing failure.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/generate/landing-page-roast": {
            "post": {
                "operationId": "reviewLandingPage",
                "summary": "Review landing-page positioning",
                "description": "Review landing-page positioning. Public tool requiring no authentication. AI-generated fields are model output, not schema-validated guarantees. Inspect HTTP 200 bodies for provider throttling. Avoid bulk requests; no fixed public quota is published.",
                "security": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/LandingPageRoastInput"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Generated result or provider throttling message. Output fields describe the requested AI format.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/LandingPageReview"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            },
                            "text/plain": {
                                "schema": {
                                    "type": "string",
                                    "description": "Provider throttling message, returned with HTTP 200."
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid request body.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    },
                    "500": {
                        "description": "Provider, configuration, or model-output parsing failure.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "SaasIdeaInput": {
                "type": "object",
                "properties": {
                    "userInput": {
                        "type": "string",
                        "description": "Describe your interests, audience, or problem.",
                        "minLength": 20,
                        "maxLength": 2000
                    }
                },
                "required": [
                    "userInput"
                ]
            },
            "PrivacyPolicyInput": {
                "type": "object",
                "properties": {
                    "companyName": {
                        "type": "string",
                        "description": "Company name.",
                        "minLength": 1,
                        "maxLength": 100
                    },
                    "websiteUrl": {
                        "type": "string",
                        "description": "Website URL.",
                        "minLength": 1,
                        "maxLength": 200
                    },
                    "contactEmail": {
                        "type": "string",
                        "description": "Public contact email.",
                        "minLength": 1,
                        "maxLength": 100
                    },
                    "collectedData": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "description": "Data category."
                        },
                        "maxItems": 10
                    },
                    "useAnalytics": {
                        "type": "boolean",
                        "description": "Whether analytics tools are used."
                    },
                    "analyticsTools": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "description": "Analytics tool name."
                        },
                        "maxItems": 10
                    },
                    "compliance": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "description": "Requested compliance framework, such as GDPR."
                        }
                    }
                },
                "required": [
                    "companyName",
                    "websiteUrl",
                    "contactEmail",
                    "collectedData",
                    "useAnalytics",
                    "analyticsTools",
                    "compliance"
                ]
            },
            "LandingPageRoastInput": {
                "type": "object",
                "properties": {
                    "url": {
                        "type": "string",
                        "description": "Landing-page URL; the model may infer feedback without visiting it.",
                        "minLength": 1,
                        "maxLength": 500
                    }
                },
                "required": [
                    "url"
                ]
            },
            "Error": {
                "type": "object",
                "properties": {
                    "statusCode": {
                        "type": "integer"
                    },
                    "statusMessage": {
                        "type": "string",
                        "description": "Error summary."
                    },
                    "message": {
                        "type": "string",
                        "description": "Error message."
                    },
                    "data": {}
                },
                "required": [
                    "statusCode",
                    "message"
                ]
            },
            "SaasIdeas": {
                "type": "object",
                "properties": {
                    "ideas": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "name": {
                                    "type": "string",
                                    "description": "Idea name."
                                },
                                "oneLiner": {
                                    "type": "string",
                                    "description": "Short summary."
                                },
                                "forWho": {
                                    "type": "string",
                                    "description": "Intended customer."
                                },
                                "problem": {
                                    "type": "string",
                                    "description": "Problem addressed."
                                },
                                "monetization": {
                                    "type": "string",
                                    "description": "Revenue model."
                                },
                                "whyNow": {
                                    "type": "string",
                                    "description": "Why this idea is timely."
                                }
                            }
                        }
                    },
                    "recommended": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "type": "string",
                                "description": "Recommended idea."
                            },
                            "reason": {
                                "type": "string",
                                "description": "Reason for the recommendation."
                            }
                        }
                    }
                }
            },
            "PrivacyPolicy": {
                "type": "object",
                "properties": {
                    "disclaimer": {
                        "type": "string",
                        "description": "Informational disclaimer; review the draft before publication."
                    },
                    "sections": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "title": {
                                    "type": "string",
                                    "description": "Section title."
                                },
                                "content": {
                                    "type": "string",
                                    "description": "Section content, plain text or Markdown."
                                }
                            }
                        }
                    }
                }
            },
            "LandingPageReview": {
                "type": "object",
                "properties": {
                    "verdict": {
                        "type": "string",
                        "description": "Feedback summary."
                    },
                    "status": {
                        "type": "string",
                        "description": "Model assessment.",
                        "enum": [
                            "excellent",
                            "strong",
                            "average",
                            "weak"
                        ]
                    },
                    "overallVibe": {
                        "type": "string",
                        "description": "Perceived positioning and presentation."
                    },
                    "redFlags": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "issue": {
                                    "type": "string",
                                    "description": "Potential issue."
                                },
                                "improvement": {
                                    "type": "string",
                                    "description": "Suggested improvement."
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
