{
  "openapi": "3.1.0",
  "info": {
    "title": "re:solved Public API",
    "version": "1.0.0",
    "x-api-version": "v1",
    "summary": "Public endpoints and machine-readable resources of re:solved digital.",
    "description": "re:solved digital builds and operates managed AI agents. This specification covers the public HTTP surface: the AI automation opportunity report intake endpoint, the machine-readable discovery files (llms.txt, ai.txt, sitemaps, RSS) and the MCP server used by AI agents. Developer documentation lives at /developers.\n\n## Versioning\n\nThe API uses URL path versioning: the canonical form is /api/public/v1/... and the current major version is v1 (supported: v1). Unversioned paths such as /api/public/ai-audit-submit are permanent aliases of the current major version. Every response carries an API-Version header.\n\n## Deprecation\n\nBreaking changes ship only under a new major version path (for example /api/public/v2/...). Endpoints scheduled for removal respond with Deprecation: true, a Sunset date (RFC 8594) and Link rel=\"deprecation\" pointing at /developers#versioning, at least 180 days before removal. The machine-readable policy is at /api/public/versions.\n\n## Access and onboarding\n\nNo API key, account or sales conversation is required. Every endpoint tagged content, discovery and meta is free and callable anonymously; the only limit is the documented rate limit. Sandbox: POST /api/public/v1/ai-audit-submit with \"dry_run\": true validates and echoes a submission without creating a lead. The machine-readable summary is the x-agent-onboarding extension of this document.\n\n## Rate limits\n\nEvery API response advertises its quota with IETF RateLimit header fields: RateLimit-Policy: \"default\";q=60;w=60, plus a live RateLimit: \"default\";r=<remaining>;t=<seconds-until-reset> on rate-limited endpoints, mirrored by X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. Exceeding the quota returns HTTP 429 with a Retry-After header and a structured JSON error with code rate_limited. The machine-readable policy is in the x-rate-limit extension of this document and at /api/public/versions.",
    "contact": {
      "name": "re:solved digital",
      "email": "contact@re-solved.digital",
      "url": "https://re-solved.digital/developers"
    },
    "license": {
      "name": "Proprietary",
      "url": "https://re-solved.digital/terms"
    }
  },
  "servers": [
    {
      "url": "https://re-solved.digital",
      "description": "Production"
    }
  ],
  "x-versioning": {
    "strategy": "url-path",
    "currentVersion": "v1",
    "supportedVersions": [
      "v1"
    ],
    "versionHeader": "API-Version",
    "unversionedAliases": "resolve to the current major version",
    "deprecationSignals": [
      "Deprecation",
      "Sunset",
      "Link rel=\"deprecation\""
    ],
    "minimumNoticeDays": 180,
    "docs": "https://re-solved.digital/developers#versioning"
  },
  "x-agent-onboarding": {
    "authRequired": false,
    "apiKeyRequired": false,
    "signupRequired": false,
    "humanApprovalRequired": false,
    "freeTier": {
      "available": true,
      "price": 0,
      "currency": "EUR",
      "description": "Every endpoint tagged content, discovery and meta is free and callable anonymously, with no registration, key or contact-sales step. The quota is the standard rate limit."
    },
    "sandbox": {
      "available": true,
      "endpoint": "https://re-solved.digital/api/public/v1/ai-audit-submit",
      "activation": "Send \"dry_run\": true in the JSON body.",
      "description": "Exercises the full contract - validation, rate-limit headers, response shape - and echoes the normalised submission back without creating a lead or notifying anyone."
    },
    "gettingStarted": [
      "GET https://re-solved.digital/api/public/v1/services - no credentials required.",
      "GET https://re-solved.digital/api/public/v1/blog/posts?q=agents - search the guide library.",
      "POST https://re-solved.digital/api/public/v1/ai-audit-submit with {\"dry_run\": true, ...} - safe sandbox call.",
      "Connect the MCP server at https://re-solved.digital/mcp (manifest: https://re-solved.digital/.well-known/mcp.json)."
    ],
    "humanEscalation": "https://re-solved.digital/developers"
  },
  "x-rate-limit": {
    "name": "default",
    "limit": 60,
    "windowSeconds": 60,
    "scope": "per client IP address, per endpoint group",
    "headers": [
      "RateLimit-Policy",
      "RateLimit",
      "X-RateLimit-Limit",
      "X-RateLimit-Remaining",
      "X-RateLimit-Reset",
      "Retry-After"
    ],
    "standard": "IETF RateLimit header fields (draft-ietf-httpapi-ratelimit-headers)",
    "docs": "https://re-solved.digital/developers#rate-limits",
    "policyHeaderValue": "\"default\";q=60;w=60",
    "exceededStatus": 429,
    "exceededErrorCode": "rate_limited"
  },
  "externalDocs": {
    "description": "Developer documentation",
    "url": "https://re-solved.digital/developers"
  },
  "tags": [
    {
      "name": "intake",
      "description": "Lead and audit intake endpoints."
    },
    {
      "name": "discovery",
      "description": "Machine-readable files for agents and crawlers."
    },
    {
      "name": "mcp",
      "description": "Model Context Protocol server endpoints."
    },
    {
      "name": "content",
      "description": "Zero-auth, read-only content endpoints (services, pricing, guides)."
    },
    {
      "name": "meta",
      "description": "API versioning and deprecation metadata."
    }
  ],
  "paths": {
    "/api/public/ai-audit-submit": {
      "post": {
        "tags": [
          "intake"
        ],
        "operationId": "submitAiAuditRequest",
        "summary": "Submit an AI automation opportunity report request",
        "description": "Public, unauthenticated intake endpoint behind the AI Automation Opportunity Report form. Returns { ok: true } on success and a structured JSON error otherwise.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AiAuditSubmission",
                "type": "object",
                "title": "AiAuditSubmission",
                "properties": {
                  "name": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "maxLength": 320
                  },
                  "company_name": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "website_url": {
                    "type": "string",
                    "maxLength": 500
                  },
                  "linkedin_url": {
                    "type": "string",
                    "maxLength": 500
                  },
                  "business_description": {
                    "type": "string",
                    "maxLength": 5000
                  },
                  "biggest_manual_task": {
                    "type": "string",
                    "maxLength": 5000
                  },
                  "tools_used": {
                    "type": "string",
                    "maxLength": 5000
                  },
                  "additional_context": {
                    "type": "string",
                    "maxLength": 5000
                  },
                  "task_frequency": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "time_spent_on_task": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "people_involved": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "monthly_volume": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "delay_or_error_impact": {
                    "type": "array",
                    "maxItems": 20,
                    "items": {
                      "type": "string",
                      "maxLength": 200
                    }
                  },
                  "internal_hourly_cost_range": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "consent_to_contact": {
                    "type": "boolean"
                  },
                  "source": {
                    "type": "string",
                    "maxLength": 100
                  },
                  "dry_run": {
                    "type": "boolean",
                    "description": "Sandbox mode. When true the endpoint validates the payload and echoes it back without creating a lead or notifying anyone.",
                    "default": false
                  }
                },
                "required": [
                  "name",
                  "email",
                  "company_name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Submission accepted (or echoed back when dry_run is true).",
            "headers": {
              "RateLimit-Policy": {
                "description": "Quota policy in IETF RateLimit structured-field form.",
                "schema": {
                  "type": "string",
                  "example": "\"default\";q=60;w=60"
                }
              },
              "RateLimit": {
                "description": "Remaining quota (r) and seconds until the window resets (t).",
                "schema": {
                  "type": "string",
                  "example": "\"default\";r=59;t=57"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Legacy quota limit.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Legacy remaining quota.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "Legacy seconds until the window resets.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AiAuditAccepted",
                  "type": "object",
                  "title": "AiAuditAccepted",
                  "properties": {
                    "ok": {
                      "type": "boolean",
                      "const": true
                    },
                    "dry_run": {
                      "type": "boolean",
                      "description": "Present and true when the request was a sandbox call; no lead was created."
                    },
                    "received": {
                      "type": "object",
                      "description": "Normalised submission echoed back in sandbox mode only.",
                      "additionalProperties": true
                    }
                  },
                  "required": [
                    "ok"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid JSON body or missing required fields.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (more than 60 requests per 60 seconds).",
            "headers": {
              "RateLimit-Policy": {
                "description": "Quota policy in IETF RateLimit structured-field form.",
                "schema": {
                  "type": "string",
                  "example": "\"default\";q=60;w=60"
                }
              },
              "RateLimit": {
                "description": "Remaining quota (r) and seconds until the window resets (t).",
                "schema": {
                  "type": "string",
                  "example": "\"default\";r=59;t=57"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Legacy quota limit.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Legacy remaining quota.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "Legacy seconds until the window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "example": 30
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "options": {
        "tags": [
          "intake"
        ],
        "operationId": "aiAuditSubmitPreflight",
        "summary": "CORS preflight",
        "responses": {
          "204": {
            "description": "No content."
          }
        }
      }
    },
    "/api/public/v1/ai-audit-submit": {
      "post": {
        "tags": [
          "intake"
        ],
        "operationId": "submitAiAuditRequestV1",
        "summary": "Submit an AI automation opportunity report request (v1)",
        "description": "Version-pinned form of the intake endpoint. Identical behaviour to /api/public/ai-audit-submit, which is a permanent alias of the current major version.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AiAuditSubmission",
                "type": "object",
                "title": "AiAuditSubmission",
                "properties": {
                  "name": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "maxLength": 320
                  },
                  "company_name": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "website_url": {
                    "type": "string",
                    "maxLength": 500
                  },
                  "linkedin_url": {
                    "type": "string",
                    "maxLength": 500
                  },
                  "business_description": {
                    "type": "string",
                    "maxLength": 5000
                  },
                  "biggest_manual_task": {
                    "type": "string",
                    "maxLength": 5000
                  },
                  "tools_used": {
                    "type": "string",
                    "maxLength": 5000
                  },
                  "additional_context": {
                    "type": "string",
                    "maxLength": 5000
                  },
                  "task_frequency": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "time_spent_on_task": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "people_involved": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "monthly_volume": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "delay_or_error_impact": {
                    "type": "array",
                    "maxItems": 20,
                    "items": {
                      "type": "string",
                      "maxLength": 200
                    }
                  },
                  "internal_hourly_cost_range": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "consent_to_contact": {
                    "type": "boolean"
                  },
                  "source": {
                    "type": "string",
                    "maxLength": 100
                  },
                  "dry_run": {
                    "type": "boolean",
                    "description": "Sandbox mode. When true the endpoint validates the payload and echoes it back without creating a lead or notifying anyone.",
                    "default": false
                  }
                },
                "required": [
                  "name",
                  "email",
                  "company_name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Submission accepted (or echoed back when dry_run is true).",
            "headers": {
              "RateLimit-Policy": {
                "description": "Quota policy in IETF RateLimit structured-field form.",
                "schema": {
                  "type": "string",
                  "example": "\"default\";q=60;w=60"
                }
              },
              "RateLimit": {
                "description": "Remaining quota (r) and seconds until the window resets (t).",
                "schema": {
                  "type": "string",
                  "example": "\"default\";r=59;t=57"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Legacy quota limit.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Legacy remaining quota.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "Legacy seconds until the window resets.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AiAuditAccepted",
                  "type": "object",
                  "title": "AiAuditAccepted",
                  "properties": {
                    "ok": {
                      "type": "boolean",
                      "const": true
                    },
                    "dry_run": {
                      "type": "boolean",
                      "description": "Present and true when the request was a sandbox call; no lead was created."
                    },
                    "received": {
                      "type": "object",
                      "description": "Normalised submission echoed back in sandbox mode only.",
                      "additionalProperties": true
                    }
                  },
                  "required": [
                    "ok"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid JSON body or missing required fields.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (more than 60 requests per 60 seconds).",
            "headers": {
              "RateLimit-Policy": {
                "description": "Quota policy in IETF RateLimit structured-field form.",
                "schema": {
                  "type": "string",
                  "example": "\"default\";q=60;w=60"
                }
              },
              "RateLimit": {
                "description": "Remaining quota (r) and seconds until the window resets (t).",
                "schema": {
                  "type": "string",
                  "example": "\"default\";r=59;t=57"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Legacy quota limit.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Legacy remaining quota.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "Legacy seconds until the window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "example": 30
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "options": {
        "tags": [
          "intake"
        ],
        "operationId": "aiAuditSubmitV1Preflight",
        "summary": "CORS preflight",
        "responses": {
          "204": {
            "description": "No content."
          }
        }
      }
    },
    "/api/public/v1/services": {
      "get": {
        "tags": [
          "content"
        ],
        "operationId": "getServicesAndPricing",
        "summary": "Get services, managed roles and pricing",
        "description": "Zero-auth, read-only snapshot of re:solved's positioning, managed-role catalog, delivery process, self-hosting story, pricing plans and FAQ. No API key or signup is required. Same data as the get_services_and_pricing MCP tool.",
        "parameters": [
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Content language. Defaults to English.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "ro"
              ],
              "default": "en"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Services and pricing payload.",
            "headers": {
              "RateLimit-Policy": {
                "description": "Quota policy in IETF RateLimit structured-field form.",
                "schema": {
                  "type": "string",
                  "example": "\"default\";q=60;w=60"
                }
              },
              "RateLimit": {
                "description": "Remaining quota (r) and seconds until the window resets (t).",
                "schema": {
                  "type": "string",
                  "example": "\"default\";r=59;t=57"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Legacy quota limit.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Legacy remaining quota.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "Legacy seconds until the window resets.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServicesAndPricing",
                  "type": "object",
                  "title": "ServicesAndPricing",
                  "properties": {
                    "language": {
                      "type": "string",
                      "enum": [
                        "en",
                        "ro"
                      ]
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "servicesUrl": {
                      "type": "string",
                      "format": "uri"
                    },
                    "positioning": {
                      "type": "object",
                      "required": [
                        "title",
                        "summary"
                      ],
                      "properties": {
                        "title": {
                          "type": "string"
                        },
                        "summary": {
                          "type": "string"
                        }
                      }
                    },
                    "problem": {
                      "type": "object",
                      "properties": {
                        "title": {
                          "type": "string"
                        },
                        "points": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "process": {
                      "type": "object",
                      "properties": {
                        "title": {
                          "type": "string"
                        },
                        "steps": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "step": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string"
                              },
                              "body": {
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    },
                    "roles": {
                      "type": "object",
                      "properties": {
                        "title": {
                          "type": "string"
                        },
                        "sub": {
                          "type": "string"
                        },
                        "roles": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "eyebrow": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string"
                              },
                              "body": {
                                "type": "string"
                              },
                              "reports": {
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    },
                    "selfHosted": {
                      "type": "object",
                      "properties": {
                        "title": {
                          "type": "string"
                        },
                        "body": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "bullets": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "pricing": {
                      "type": "object",
                      "properties": {
                        "title": {
                          "type": "string"
                        },
                        "lede": {
                          "type": "string"
                        },
                        "plans": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "description": {
                                "type": "string"
                              },
                              "price": {
                                "type": "string"
                              },
                              "popular": {
                                "type": "boolean"
                              },
                              "includes": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              }
                            }
                          }
                        }
                      }
                    },
                    "faq": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "question": {
                            "type": "string"
                          },
                          "answer": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "language",
                    "url",
                    "positioning",
                    "roles",
                    "pricing"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Unsupported language.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (more than 60 requests per 60 seconds).",
            "headers": {
              "RateLimit-Policy": {
                "description": "Quota policy in IETF RateLimit structured-field form.",
                "schema": {
                  "type": "string",
                  "example": "\"default\";q=60;w=60"
                }
              },
              "RateLimit": {
                "description": "Remaining quota (r) and seconds until the window resets (t).",
                "schema": {
                  "type": "string",
                  "example": "\"default\";r=59;t=57"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Legacy quota limit.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Legacy remaining quota.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "Legacy seconds until the window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "example": 30
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "options": {
        "tags": [
          "content"
        ],
        "operationId": "servicesPreflight",
        "summary": "CORS preflight",
        "responses": {
          "204": {
            "description": "No content."
          }
        }
      }
    },
    "/api/public/v1/blog/posts": {
      "get": {
        "tags": [
          "content"
        ],
        "operationId": "listBlogPosts",
        "summary": "List or search published blog posts",
        "description": "Zero-auth, read-only list of published guides, newest first. Pass q to run a full-text search that returns a matching snippet per post. No API key or signup is required.",
        "parameters": [
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Content language. Defaults to English.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "ro"
              ],
              "default": "en"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Full-text search phrase. Omit to list every post.",
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of posts to return (1-50).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Post summaries.",
            "headers": {
              "RateLimit-Policy": {
                "description": "Quota policy in IETF RateLimit structured-field form.",
                "schema": {
                  "type": "string",
                  "example": "\"default\";q=60;w=60"
                }
              },
              "RateLimit": {
                "description": "Remaining quota (r) and seconds until the window resets (t).",
                "schema": {
                  "type": "string",
                  "example": "\"default\";r=59;t=57"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Legacy quota limit.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Legacy remaining quota.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "Legacy seconds until the window resets.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlogPostList",
                  "type": "object",
                  "title": "BlogPostList",
                  "properties": {
                    "language": {
                      "type": "string",
                      "enum": [
                        "en",
                        "ro"
                      ]
                    },
                    "query": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Search phrase, or null when listing."
                    },
                    "count": {
                      "type": "integer"
                    },
                    "posts": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/BlogPostSummary"
                      }
                    }
                  },
                  "required": [
                    "language",
                    "count",
                    "posts"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Unsupported language.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (more than 60 requests per 60 seconds).",
            "headers": {
              "RateLimit-Policy": {
                "description": "Quota policy in IETF RateLimit structured-field form.",
                "schema": {
                  "type": "string",
                  "example": "\"default\";q=60;w=60"
                }
              },
              "RateLimit": {
                "description": "Remaining quota (r) and seconds until the window resets (t).",
                "schema": {
                  "type": "string",
                  "example": "\"default\";r=59;t=57"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Legacy quota limit.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Legacy remaining quota.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "Legacy seconds until the window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "example": 30
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "options": {
        "tags": [
          "content"
        ],
        "operationId": "blogPostsPreflight",
        "summary": "CORS preflight",
        "responses": {
          "204": {
            "description": "No content."
          }
        }
      }
    },
    "/api/public/v1/blog/posts/{slug}": {
      "get": {
        "tags": [
          "content"
        ],
        "operationId": "getBlogPost",
        "summary": "Get one blog post as markdown",
        "description": "Zero-auth, read-only full text of a single guide, rendered as markdown. No API key or signup is required.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Post slug, for example how-to-choose-ai-automation-agency.",
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Content language. Defaults to English.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "ro"
              ],
              "default": "en"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The post, including its markdown body.",
            "headers": {
              "RateLimit-Policy": {
                "description": "Quota policy in IETF RateLimit structured-field form.",
                "schema": {
                  "type": "string",
                  "example": "\"default\";q=60;w=60"
                }
              },
              "RateLimit": {
                "description": "Remaining quota (r) and seconds until the window resets (t).",
                "schema": {
                  "type": "string",
                  "example": "\"default\";r=59;t=57"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Legacy quota limit.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Legacy remaining quota.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "Legacy seconds until the window resets.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlogPost",
                  "type": "object",
                  "title": "BlogPost",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/BlogPostSummary"
                    },
                    {
                      "type": "object",
                      "required": [
                        "markdown"
                      ],
                      "properties": {
                        "markdown": {
                          "type": "string",
                          "description": "Full post body as markdown."
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Unsupported language.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Unknown slug; details.availableSlugs lists valid slugs.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (more than 60 requests per 60 seconds).",
            "headers": {
              "RateLimit-Policy": {
                "description": "Quota policy in IETF RateLimit structured-field form.",
                "schema": {
                  "type": "string",
                  "example": "\"default\";q=60;w=60"
                }
              },
              "RateLimit": {
                "description": "Remaining quota (r) and seconds until the window resets (t).",
                "schema": {
                  "type": "string",
                  "example": "\"default\";r=59;t=57"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Legacy quota limit.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Legacy remaining quota.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "Legacy seconds until the window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "example": 30
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "options": {
        "tags": [
          "content"
        ],
        "operationId": "blogPostPreflight",
        "summary": "CORS preflight",
        "responses": {
          "204": {
            "description": "No content."
          }
        }
      }
    },
    "/api/public/versions": {
      "get": {
        "tags": [
          "meta"
        ],
        "operationId": "getApiVersioningPolicy",
        "summary": "API versioning and deprecation policy",
        "description": "Machine-readable versioning strategy, supported versions, deprecation signals, rate-limit policy and per-endpoint status.",
        "responses": {
          "200": {
            "description": "Versioning policy document.",
            "headers": {
              "RateLimit-Policy": {
                "description": "Quota policy in IETF RateLimit structured-field form.",
                "schema": {
                  "type": "string",
                  "example": "\"default\";q=60;w=60"
                }
              },
              "RateLimit": {
                "description": "Remaining quota (r) and seconds until the window resets (t).",
                "schema": {
                  "type": "string",
                  "example": "\"default\";r=59;t=57"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Legacy quota limit.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Legacy remaining quota.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "Legacy seconds until the window resets.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VersioningPolicy",
                  "type": "object",
                  "title": "VersioningPolicy",
                  "properties": {
                    "strategy": {
                      "type": "string",
                      "const": "url-path"
                    },
                    "currentVersion": {
                      "type": "string",
                      "example": "v1"
                    },
                    "supportedVersions": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "versionHeader": {
                      "type": "string",
                      "const": "API-Version"
                    },
                    "unversionedAliases": {
                      "type": "string"
                    },
                    "deprecationSignals": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "minimumNoticeDays": {
                      "type": "integer"
                    },
                    "deprecationPolicy": {
                      "type": "string"
                    },
                    "docs": {
                      "type": "string",
                      "format": "uri"
                    },
                    "onboarding": {
                      "type": "object",
                      "properties": {
                        "authRequired": {
                          "type": "boolean"
                        },
                        "apiKeyRequired": {
                          "type": "boolean"
                        },
                        "signupRequired": {
                          "type": "boolean"
                        },
                        "freeTier": {
                          "type": "boolean"
                        },
                        "sandbox": {
                          "type": "object",
                          "properties": {
                            "endpoint": {
                              "type": "string"
                            },
                            "activation": {
                              "type": "string"
                            }
                          }
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        }
                      }
                    },
                    "rateLimit": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "limit": {
                          "type": "integer"
                        },
                        "windowSeconds": {
                          "type": "integer"
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        }
                      }
                    },
                    "endpoints": {
                      "type": "object",
                      "description": "Per-endpoint lifecycle status keyed by path.",
                      "additionalProperties": {
                        "type": "object",
                        "properties": {
                          "status": {
                            "type": "string",
                            "enum": [
                              "stable",
                              "stable-alias",
                              "deprecated"
                            ]
                          },
                          "since": {
                            "type": "string"
                          },
                          "aliasOf": {
                            "type": "string"
                          },
                          "sunset": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "strategy",
                    "currentVersion",
                    "supportedVersions"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (more than 60 requests per 60 seconds).",
            "headers": {
              "RateLimit-Policy": {
                "description": "Quota policy in IETF RateLimit structured-field form.",
                "schema": {
                  "type": "string",
                  "example": "\"default\";q=60;w=60"
                }
              },
              "RateLimit": {
                "description": "Remaining quota (r) and seconds until the window resets (t).",
                "schema": {
                  "type": "string",
                  "example": "\"default\";r=59;t=57"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Legacy quota limit.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Legacy remaining quota.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "Legacy seconds until the window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "example": 30
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error",
                  "type": "object",
                  "title": "Error",
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message",
                        "hint",
                        "status"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "example": "invalid_request"
                        },
                        "message": {
                          "type": "string",
                          "example": "Name, company name and a valid email are required."
                        },
                        "hint": {
                          "type": "string",
                          "example": "Send name, email and company_name as non-empty strings."
                        },
                        "status": {
                          "type": "integer",
                          "example": 400
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        },
                        "openapi": {
                          "type": "string",
                          "format": "uri"
                        },
                        "details": {}
                      }
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/api-catalog": {
      "get": {
        "tags": [
          "discovery"
        ],
        "operationId": "getApiCatalog",
        "summary": "RFC 9727 API catalog linkset",
        "responses": {
          "200": {
            "description": "Linkset document.",
            "content": {
              "application/linkset+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiCatalog",
                  "type": "object",
                  "title": "ApiCatalog",
                  "properties": {
                    "linkset": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "anchor"
                        ],
                        "properties": {
                          "anchor": {
                            "type": "string",
                            "format": "uri"
                          },
                          "service-desc": {
                            "type": "array",
                            "items": {
                              "$ref": "#/components/schemas/LinksetLink"
                            }
                          },
                          "service-doc": {
                            "type": "array",
                            "items": {
                              "$ref": "#/components/schemas/LinksetLink"
                            }
                          },
                          "service-meta": {
                            "type": "array",
                            "items": {
                              "$ref": "#/components/schemas/LinksetLink"
                            }
                          },
                          "status": {
                            "type": "array",
                            "items": {
                              "$ref": "#/components/schemas/LinksetLink"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "linkset"
                  ]
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiCatalog",
                  "type": "object",
                  "title": "ApiCatalog",
                  "properties": {
                    "linkset": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "anchor"
                        ],
                        "properties": {
                          "anchor": {
                            "type": "string",
                            "format": "uri"
                          },
                          "service-desc": {
                            "type": "array",
                            "items": {
                              "$ref": "#/components/schemas/LinksetLink"
                            }
                          },
                          "service-doc": {
                            "type": "array",
                            "items": {
                              "$ref": "#/components/schemas/LinksetLink"
                            }
                          },
                          "service-meta": {
                            "type": "array",
                            "items": {
                              "$ref": "#/components/schemas/LinksetLink"
                            }
                          },
                          "status": {
                            "type": "array",
                            "items": {
                              "$ref": "#/components/schemas/LinksetLink"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "linkset"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "tags": [
          "discovery"
        ],
        "operationId": "getOpenApiSpec",
        "summary": "This OpenAPI specification",
        "responses": {
          "200": {
            "description": "OpenAPI 3.1 document.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenApiDocument",
                  "type": "object",
                  "title": "OpenApiDocument",
                  "properties": {
                    "openapi": {
                      "type": "string",
                      "example": "3.1.0"
                    },
                    "info": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "servers": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "paths": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "components": {
                      "type": "object",
                      "additionalProperties": true
                    }
                  },
                  "required": [
                    "openapi",
                    "info",
                    "paths"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/llms.txt": {
      "get": {
        "tags": [
          "discovery"
        ],
        "operationId": "getLlmsTxt",
        "summary": "llms.txt site summary for language models",
        "responses": {
          "200": {
            "description": "Plain text summary.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/ai.txt": {
      "get": {
        "tags": [
          "discovery"
        ],
        "operationId": "getAiTxt",
        "summary": "AI access and usage directives",
        "responses": {
          "200": {
            "description": "Plain text directives.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/sitemap.xml": {
      "get": {
        "tags": [
          "discovery"
        ],
        "operationId": "getSitemap",
        "summary": "XML sitemap with hreflang alternates",
        "responses": {
          "200": {
            "description": "XML sitemap.",
            "content": {
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/rss.xml": {
      "get": {
        "tags": [
          "discovery"
        ],
        "operationId": "getRssFeed",
        "summary": "Blog RSS feed",
        "responses": {
          "200": {
            "description": "RSS 2.0 feed.",
            "content": {
              "application/rss+xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/mcp": {
      "post": {
        "tags": [
          "mcp"
        ],
        "operationId": "mcpJsonRpc",
        "summary": "MCP (Model Context Protocol) endpoint",
        "description": "Streamable-HTTP MCP endpoint exposing get_services_and_pricing, list_blog_posts, search_blog_posts and get_blog_post. No authentication required: the tools return already-published website content. The server manifest is at /.well-known/mcp.json.",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JsonRpcRequest",
                "type": "object",
                "title": "JsonRpcRequest",
                "properties": {
                  "jsonrpc": {
                    "type": "string",
                    "const": "2.0"
                  },
                  "id": {
                    "type": [
                      "string",
                      "integer",
                      "null"
                    ]
                  },
                  "method": {
                    "type": "string",
                    "example": "tools/call"
                  },
                  "params": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "jsonrpc",
                  "method"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "JSON-RPC 2.0 response (JSON or an SSE stream of JSON-RPC messages).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JsonRpcResponse",
                  "type": "object",
                  "title": "JsonRpcResponse",
                  "properties": {
                    "jsonrpc": {
                      "type": "string",
                      "const": "2.0"
                    },
                    "id": {
                      "type": [
                        "string",
                        "integer",
                        "null"
                      ]
                    },
                    "result": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "error": {
                      "type": "object",
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        },
                        "data": {}
                      }
                    }
                  },
                  "required": [
                    "jsonrpc"
                  ]
                }
              },
              "text/event-stream": {
                "schema": {
                  "type": "string",
                  "description": "SSE stream of JSON-RPC 2.0 messages."
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/mcp.json": {
      "get": {
        "tags": [
          "mcp"
        ],
        "operationId": "getMcpManifest",
        "summary": "MCP server manifest",
        "description": "Machine-readable manifest for the re:solved MCP server: Streamable HTTP endpoint, protocol version, authorization requirements, capabilities and the full tool catalog with input schemas. Aliases: /.well-known/mcp/manifest.json and /mcp.json.",
        "responses": {
          "200": {
            "description": "MCP manifest document.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/McpManifest",
                  "type": "object",
                  "title": "McpManifest",
                  "properties": {
                    "schema_version": {
                      "type": "string"
                    },
                    "protocol_version": {
                      "type": "string",
                      "example": "2025-06-18"
                    },
                    "name": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    },
                    "version": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "instructions": {
                      "type": "string"
                    },
                    "transport": {
                      "type": "object",
                      "required": [
                        "type",
                        "url"
                      ],
                      "properties": {
                        "type": {
                          "type": "string",
                          "const": "streamable-http"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "methods": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "accept": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "spec": {
                          "type": "string",
                          "format": "uri"
                        }
                      }
                    },
                    "mcpServers": {
                      "type": "object",
                      "description": "Drop-in MCP client configuration block.",
                      "additionalProperties": {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string"
                          },
                          "transport": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string",
                            "format": "uri"
                          }
                        }
                      }
                    },
                    "capabilities": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "authorization": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "oauth2.1"
                        },
                        "required": {
                          "type": "boolean"
                        },
                        "resource": {
                          "type": "string",
                          "format": "uri"
                        },
                        "protected_resource_metadata": {
                          "type": "string",
                          "format": "uri"
                        },
                        "dynamic_client_registration": {
                          "type": "boolean"
                        },
                        "pkce_required": {
                          "type": "boolean"
                        }
                      }
                    },
                    "tools": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/McpTool"
                      }
                    },
                    "documentation": {
                      "type": "string",
                      "format": "uri"
                    },
                    "openapi": {
                      "type": "string",
                      "format": "uri"
                    },
                    "manifest_urls": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "format": "uri"
                      }
                    },
                    "contact": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "privacy_policy": {
                      "type": "string",
                      "format": "uri"
                    },
                    "terms_of_service": {
                      "type": "string",
                      "format": "uri"
                    }
                  },
                  "required": [
                    "name",
                    "version",
                    "protocol_version",
                    "transport",
                    "tools"
                  ]
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message",
              "hint",
              "status"
            ],
            "properties": {
              "code": {
                "type": "string",
                "example": "invalid_request"
              },
              "message": {
                "type": "string",
                "example": "Name, company name and a valid email are required."
              },
              "hint": {
                "type": "string",
                "example": "Send name, email and company_name as non-empty strings."
              },
              "status": {
                "type": "integer",
                "example": 400
              },
              "docs": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "details": {}
            }
          }
        }
      },
      "AiAuditAccepted": {
        "type": "object",
        "required": [
          "ok"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "const": true
          },
          "dry_run": {
            "type": "boolean",
            "description": "Present and true when the request was a sandbox call; no lead was created."
          },
          "received": {
            "type": "object",
            "description": "Normalised submission echoed back in sandbox mode only.",
            "additionalProperties": true
          }
        }
      },
      "ServicesAndPricing": {
        "type": "object",
        "required": [
          "language",
          "url",
          "positioning",
          "roles",
          "pricing"
        ],
        "properties": {
          "language": {
            "type": "string",
            "enum": [
              "en",
              "ro"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "servicesUrl": {
            "type": "string",
            "format": "uri"
          },
          "positioning": {
            "type": "object",
            "required": [
              "title",
              "summary"
            ],
            "properties": {
              "title": {
                "type": "string"
              },
              "summary": {
                "type": "string"
              }
            }
          },
          "problem": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "points": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "process": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "steps": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "step": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    },
                    "body": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "roles": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "sub": {
                "type": "string"
              },
              "roles": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "eyebrow": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    },
                    "body": {
                      "type": "string"
                    },
                    "reports": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "selfHosted": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "body": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "bullets": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "pricing": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "lede": {
                "type": "string"
              },
              "plans": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "price": {
                      "type": "string"
                    },
                    "popular": {
                      "type": "boolean"
                    },
                    "includes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "faq": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "question": {
                  "type": "string"
                },
                "answer": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "BlogPostSummary": {
        "type": "object",
        "required": [
          "slug",
          "title",
          "excerpt",
          "date",
          "language",
          "url"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "excerpt": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "description": "Publication date (YYYY-MM-DD)."
          },
          "readingMinutes": {
            "type": "integer"
          },
          "language": {
            "type": "string",
            "enum": [
              "en",
              "ro"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "snippet": {
            "type": "string",
            "description": "Matching excerpt, present only on search results."
          }
        }
      },
      "BlogPostList": {
        "type": "object",
        "required": [
          "language",
          "count",
          "posts"
        ],
        "properties": {
          "language": {
            "type": "string",
            "enum": [
              "en",
              "ro"
            ]
          },
          "query": {
            "type": [
              "string",
              "null"
            ],
            "description": "Search phrase, or null when listing."
          },
          "count": {
            "type": "integer"
          },
          "posts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BlogPostSummary"
            }
          }
        }
      },
      "BlogPost": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/BlogPostSummary"
          },
          {
            "type": "object",
            "required": [
              "markdown"
            ],
            "properties": {
              "markdown": {
                "type": "string",
                "description": "Full post body as markdown."
              }
            }
          }
        ]
      },
      "VersioningPolicy": {
        "type": "object",
        "required": [
          "strategy",
          "currentVersion",
          "supportedVersions"
        ],
        "properties": {
          "strategy": {
            "type": "string",
            "const": "url-path"
          },
          "currentVersion": {
            "type": "string",
            "example": "v1"
          },
          "supportedVersions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "versionHeader": {
            "type": "string",
            "const": "API-Version"
          },
          "unversionedAliases": {
            "type": "string"
          },
          "deprecationSignals": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "minimumNoticeDays": {
            "type": "integer"
          },
          "deprecationPolicy": {
            "type": "string"
          },
          "docs": {
            "type": "string",
            "format": "uri"
          },
          "onboarding": {
            "type": "object",
            "properties": {
              "authRequired": {
                "type": "boolean"
              },
              "apiKeyRequired": {
                "type": "boolean"
              },
              "signupRequired": {
                "type": "boolean"
              },
              "freeTier": {
                "type": "boolean"
              },
              "sandbox": {
                "type": "object",
                "properties": {
                  "endpoint": {
                    "type": "string"
                  },
                  "activation": {
                    "type": "string"
                  }
                }
              },
              "docs": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "rateLimit": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "limit": {
                "type": "integer"
              },
              "windowSeconds": {
                "type": "integer"
              },
              "docs": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "endpoints": {
            "type": "object",
            "description": "Per-endpoint lifecycle status keyed by path.",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "enum": [
                    "stable",
                    "stable-alias",
                    "deprecated"
                  ]
                },
                "since": {
                  "type": "string"
                },
                "aliasOf": {
                  "type": "string"
                },
                "sunset": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "ApiCatalog": {
        "type": "object",
        "required": [
          "linkset"
        ],
        "description": "RFC 9727 API catalog linkset.",
        "properties": {
          "linkset": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "anchor"
              ],
              "properties": {
                "anchor": {
                  "type": "string",
                  "format": "uri"
                },
                "service-desc": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LinksetLink"
                  }
                },
                "service-doc": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LinksetLink"
                  }
                },
                "service-meta": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LinksetLink"
                  }
                },
                "status": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LinksetLink"
                  }
                }
              }
            }
          }
        }
      },
      "LinksetLink": {
        "type": "object",
        "required": [
          "href"
        ],
        "properties": {
          "href": {
            "type": "string",
            "format": "uri"
          },
          "type": {
            "type": "string"
          }
        }
      },
      "McpManifest": {
        "type": "object",
        "required": [
          "name",
          "version",
          "protocol_version",
          "transport",
          "tools"
        ],
        "properties": {
          "schema_version": {
            "type": "string"
          },
          "protocol_version": {
            "type": "string",
            "example": "2025-06-18"
          },
          "name": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "instructions": {
            "type": "string"
          },
          "transport": {
            "type": "object",
            "required": [
              "type",
              "url"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "streamable-http"
              },
              "url": {
                "type": "string",
                "format": "uri"
              },
              "methods": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "accept": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "spec": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "mcpServers": {
            "type": "object",
            "description": "Drop-in MCP client configuration block.",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "transport": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "capabilities": {
            "type": "object",
            "additionalProperties": true
          },
          "authorization": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "example": "oauth2.1"
              },
              "required": {
                "type": "boolean"
              },
              "resource": {
                "type": "string",
                "format": "uri"
              },
              "protected_resource_metadata": {
                "type": "string",
                "format": "uri"
              },
              "dynamic_client_registration": {
                "type": "boolean"
              },
              "pkce_required": {
                "type": "boolean"
              }
            }
          },
          "tools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/McpTool"
            }
          },
          "documentation": {
            "type": "string",
            "format": "uri"
          },
          "openapi": {
            "type": "string",
            "format": "uri"
          },
          "manifest_urls": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "contact": {
            "type": "object",
            "additionalProperties": true
          },
          "privacy_policy": {
            "type": "string",
            "format": "uri"
          },
          "terms_of_service": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "McpTool": {
        "type": "object",
        "required": [
          "name",
          "description",
          "inputSchema"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "annotations": {
            "type": "object",
            "properties": {
              "readOnlyHint": {
                "type": "boolean"
              },
              "idempotentHint": {
                "type": "boolean"
              },
              "openWorldHint": {
                "type": "boolean"
              },
              "destructiveHint": {
                "type": "boolean"
              }
            }
          },
          "inputSchema": {
            "type": "object",
            "description": "JSON Schema for the tool arguments.",
            "additionalProperties": true
          }
        }
      },
      "JsonRpcRequest": {
        "type": "object",
        "required": [
          "jsonrpc",
          "method"
        ],
        "properties": {
          "jsonrpc": {
            "type": "string",
            "const": "2.0"
          },
          "id": {
            "type": [
              "string",
              "integer",
              "null"
            ]
          },
          "method": {
            "type": "string",
            "example": "tools/call"
          },
          "params": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "JsonRpcResponse": {
        "type": "object",
        "required": [
          "jsonrpc"
        ],
        "properties": {
          "jsonrpc": {
            "type": "string",
            "const": "2.0"
          },
          "id": {
            "type": [
              "string",
              "integer",
              "null"
            ]
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "integer"
              },
              "message": {
                "type": "string"
              },
              "data": {}
            }
          }
        }
      },
      "OpenApiDocument": {
        "type": "object",
        "required": [
          "openapi",
          "info",
          "paths"
        ],
        "description": "An OpenAPI 3.1 description document.",
        "properties": {
          "openapi": {
            "type": "string",
            "example": "3.1.0"
          },
          "info": {
            "type": "object",
            "additionalProperties": true
          },
          "servers": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "paths": {
            "type": "object",
            "additionalProperties": true
          },
          "components": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "AiAuditSubmission": {
        "type": "object",
        "required": [
          "name",
          "email",
          "company_name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "email": {
            "type": "string",
            "format": "email",
            "maxLength": 320
          },
          "company_name": {
            "type": "string",
            "maxLength": 200
          },
          "website_url": {
            "type": "string",
            "maxLength": 500
          },
          "linkedin_url": {
            "type": "string",
            "maxLength": 500
          },
          "business_description": {
            "type": "string",
            "maxLength": 5000
          },
          "biggest_manual_task": {
            "type": "string",
            "maxLength": 5000
          },
          "tools_used": {
            "type": "string",
            "maxLength": 5000
          },
          "additional_context": {
            "type": "string",
            "maxLength": 5000
          },
          "task_frequency": {
            "type": "string",
            "maxLength": 200
          },
          "time_spent_on_task": {
            "type": "string",
            "maxLength": 200
          },
          "people_involved": {
            "type": "string",
            "maxLength": 200
          },
          "monthly_volume": {
            "type": "string",
            "maxLength": 200
          },
          "delay_or_error_impact": {
            "type": "array",
            "maxItems": 20,
            "items": {
              "type": "string",
              "maxLength": 200
            }
          },
          "internal_hourly_cost_range": {
            "type": "string",
            "maxLength": 200
          },
          "consent_to_contact": {
            "type": "boolean"
          },
          "source": {
            "type": "string",
            "maxLength": 100
          },
          "dry_run": {
            "type": "boolean",
            "description": "Sandbox mode. When true the endpoint validates the payload and echoes it back without creating a lead or notifying anyone.",
            "default": false
          }
        }
      }
    }
  }
}