{
  "openapi": "3.1.0",
  "info": {
    "title": "SteelERP public API",
    "version": "1.0.0",
    "description": "Public endpoint behind the demo request form on steelerp.ir. SteelERP is a system of record for steel-structure fabricators (project control, Tekla link, production, stores and MTC, quality and welding, dispatch, job cost). Submit a request only when the user asked for it; the sales team answers within one business day. No authentication; limited to 5 requests per client per hour. Agents can also use the MCP server at https://steelerp.ir/api/steelerp/mcp (OAuth 2.1) or the A2A agent at https://steelerp.ir/api/steelerp/a2a; see https://steelerp.ir/auth.md.",
    "contact": { "name": "SteelERP (Fanpino)", "email": "info@fanpino.com", "url": "https://steelerp.ir/contact/" }
  },
  "servers": [{ "url": "https://steelerp.ir" }],
  "paths": {
    "/api/waitlist": {
      "post": {
        "operationId": "requestDemo",
        "summary": "Request a SteelERP demo or a sample Final Book and part passport",
        "description": "Stores the request for the sales team. Put the request type at the start of note: \"[دمو و پایلوت]\" for a demo, \"[درخواست نمونه دفترچه و پاسپورت]\" for the sample PDF.",
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": {
            "type": "object",
            "required": ["site", "name", "phone"],
            "properties": {
              "site": { "type": "string", "const": "steelerp.ir" },
              "name": { "type": "string", "minLength": 2, "maxLength": 100, "description": "Full name of the person to contact" },
              "phone": { "type": "string", "maxLength": 20, "description": "Mobile number, 10-14 digits; Persian digits are accepted", "examples": ["09121234567"] },
              "company": { "type": "string", "maxLength": 150, "description": "Company name" },
              "note": { "type": "string", "maxLength": 1000, "description": "Request type prefix, then annual tonnage, current tools and anything else useful" }
            }
          } } }
        },
        "responses": {
          "201": { "description": "Stored", "content": { "application/json": { "schema": { "type": "object", "properties": { "ok": { "type": "boolean" } } } } } },
          "400": { "description": "Unknown site" },
          "422": { "description": "Invalid name or phone" },
          "429": { "description": "More than 5 requests from this client in the last hour" }
        }
      }
    }
  }
}
