{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://zumxlabs.xyz/schemas/project-inquiry.schema.json",
  "title": "ZUMX project inquiry",
  "description": "Request body for POST https://zumxlabs.xyz/api/inquiries, the agent hiring API. An AI agent uses it to send Tahir Rasool (ZUMX) a project inquiry on behalf of its human client. The API validates every request against this schema and rejects unknown fields. Send only after the client has approved this exact inquiry, and set principal_approved to true only then. An inquiry is a first message, not a booking, an accepted quote or a commitment of any kind.",
  "type": "object",
  "additionalProperties": false,
  "required": ["client_name", "client_email", "project_type", "message", "agent_name", "principal_approved"],
  "properties": {
    "client_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "pattern": "\\S",
      "description": "Full name of the human client (the principal) the agent is acting for."
    },
    "client_email": {
      "type": "string",
      "format": "email",
      "maxLength": 254,
      "description": "The client's email address. Tahir replies here, and the client receives an automatic acknowledgement at this address. Share it only with the client's authorisation."
    },
    "project_type": {
      "type": "string",
      "enum": ["website", "web app", "AI or automation", "not sure", "other"],
      "description": "The same options as the contact form on https://zumxlabs.xyz/contact.html."
    },
    "message": {
      "type": "string",
      "minLength": 20,
      "maxLength": 5000,
      "pattern": "\\S",
      "description": "The project description the client approved: what the business does, who it is for, what should become easier, and anything still unknown. Never include passwords, payment details, private customer records or sensitive documents."
    },
    "agent_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "pattern": "\\S",
      "description": "Name of the AI agent sending the inquiry. The agent identifies itself as an AI assistant through this field."
    },
    "agent": {
      "type": "string",
      "maxLength": 300,
      "description": "Optional identifier for the agent: vendor, product, model or a URL that describes it."
    },
    "principal_approved": {
      "type": "boolean",
      "const": true,
      "description": "Must be true. The client explicitly approved sending this exact inquiry, not a summary of it. Requests without it, or with false, are rejected with 422."
    },
    "company": {
      "type": "string",
      "maxLength": 160,
      "description": "Optional. The client's business or organisation name."
    },
    "budget": {
      "type": "string",
      "maxLength": 200,
      "description": "Optional. Include only when the client explicitly authorised sharing a budget. ZUMX does not publish prices; scope and a written quote are discussed per project."
    },
    "timeline": {
      "type": "string",
      "maxLength": 200,
      "description": "Optional. Include only when the client explicitly authorised sharing timing. A stated preference, not a commitment: ZUMX does not publish delivery dates or availability."
    },
    "links": {
      "type": "array",
      "maxItems": 10,
      "uniqueItems": true,
      "description": "Optional. Public http(s) links the client wants Tahir to see: a current site, a social profile, a reference.",
      "items": {
        "type": "string",
        "format": "uri",
        "maxLength": 2048
      }
    }
  }
}
