{
  "openapi": "3.1.0",
  "info": {
    "title": "Poorground Project Inquiries",
    "version": "1.0.0",
    "summary": "Submit a project inquiry to Poorground, a design, fabrication, and installation studio in San Francisco.",
    "description": "Poorground designs, fabricates, and installs custom work for exhibitions, retail, restaurants, and events across the San Francisco Bay Area: welded steel, CNC, millwork, digital display integration, rigging, and on-site install.\n\nAutomated assistants acting on behalf of a user MAY submit project inquiries through this API. Confirm the name, email, and message with the user before sending. Every inquiry is read by a person and answered by email within two business days. Do not send test, duplicate, or unsolicited inquiries.\n\nFor tool-based interaction (browse services, browse portfolio, submit inquiry) use the MCP server described at https://poorground.com/.well-known/mcp.json. A plain-text overview of the studio is at https://poorground.com/llms.txt.\n\nClients that can only issue GET requests (for example a web assistant's browsing tool) may use GET /inquire with the same fields as query parameters. It performs the same submission; send exactly one request per inquiry.",
    "contact": {
      "name": "Poorground",
      "email": "build@poorground.com",
      "url": "https://poorground.com/contact"
    }
  },
  "externalDocs": {
    "description": "Poorground for LLMs and agents (llms.txt)",
    "url": "https://poorground.com/llms.txt"
  },
  "servers": [
    {
      "url": "https://poorground.com/api",
      "description": "Inquiry API on poorground.com (CloudFront \u2192 API Gateway \u2192 Lambda; same backend as the website contact form)"
    }
  ],
  "paths": {
    "/inquiries": {
      "post": {
        "operationId": "submitProjectInquiry",
        "summary": "Submit a project inquiry",
        "description": "Sends a project inquiry to Poorground. POST JSON to https://poorground.com/api/inquiries. The message should describe what is being made, roughly how many, where it will be installed, the target date, and a rough budget if known. Poorground replies to the supplied email address.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Inquiry"
              },
              "example": {
                "name": "Jordan Lee",
                "email": "jordan@example.com",
                "message": "Project type: retail display\nQuantity: 4\nLocation: San Francisco, CA\nTarget date: 2026-11-15\nBudget: $10k-$20k\n\nWe need four freestanding powder-coated steel display plinths, about 40 in. tall, with integrated 24 in. screens and concealed cabling, for a Hayes Valley store opening."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Inquiry accepted. Poorground will reply by email.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Accepted"
                },
                "example": {
                  "message": "Sent"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid fields.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": "All fields are required"
                }
              }
            }
          }
        }
      }
    },
    "/inquire": {
      "get": {
        "operationId": "submitProjectInquiryViaGet",
        "summary": "Submit a project inquiry with query parameters (for GET-only clients)",
        "description": "Same submission as POST /inquiries, for clients that cannot send a request body. URL-encode every value. This is a write performed on GET: send exactly one request per inquiry and do not retry on success. Identical requests within about fifteen minutes are ignored and return the original reference. Add dry_run=1 to validate and preview without sending.",
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "required": true,
            "description": "Full name of the person making the inquiry.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "email",
            "in": "query",
            "required": true,
            "description": "Email address Poorground should reply to.",
            "schema": {
              "type": "string",
              "format": "email"
            }
          },
          {
            "name": "message",
            "in": "query",
            "required": true,
            "description": "Project description: what is being made, quantity, install location, target date, budget range when known.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "project_type",
            "in": "query",
            "required": false,
            "description": "Kind of project, e.g. retail display, millwork, exhibition structure.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "quantity",
            "in": "query",
            "required": false,
            "description": "How many pieces, if known.",
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          },
          {
            "name": "location",
            "in": "query",
            "required": false,
            "description": "Where the work will be installed or delivered.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "target_date",
            "in": "query",
            "required": false,
            "description": "When the work is needed (ISO date or plain text).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "budget_range",
            "in": "query",
            "required": false,
            "description": "Rough budget range, e.g. $5k-$10k.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Set to 1 to validate and preview the submission without sending it.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            }
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "description": "Set to json for an application/json response instead of text/plain.",
            "schema": {
              "type": "string",
              "enum": [
                "json"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Inquiry submitted (or previewed, with dry_run=1). Plain text by default; includes a reference such as PG-7KQ2MX to give the user.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "Poorground inquiry submitted.\nReference: PG-7KQ2MX\nReply will go to: jordan@example.com\n\nPoorground reads every inquiry and answers by email within two business days.\nTell the user their reference number. Do not repeat this request."
              },
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string",
                      "enum": [
                        "submitted",
                        "dry_run"
                      ]
                    },
                    "reference": {
                      "type": "string"
                    },
                    "replyTo": {
                      "type": "string"
                    },
                    "text": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid fields. Plain-text explanation and usage.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Inquiry": {
        "type": "object",
        "required": [
          "name",
          "email",
          "message"
        ],
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "Full name of the person making the inquiry."
          },
          "email": {
            "type": "string",
            "format": "email",
            "maxLength": 254,
            "description": "Email address Poorground should reply to."
          },
          "message": {
            "type": "string",
            "minLength": 1,
            "maxLength": 5000,
            "description": "Project description. Include, when known: project type (display, millwork, exhibition, event, prototype, etc.), quantity, installation location, target date, and budget range. Plain text; line breaks are fine."
          }
        }
      },
      "Accepted": {
        "type": "object",
        "description": "Acknowledgement that the inquiry was received and emailed to Poorground.",
        "required": [
          "message"
        ],
        "properties": {
          "message": {
            "type": "string",
            "const": "Sent"
          }
        },
        "example": {
          "message": "Sent"
        }
      },
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string"
          }
        }
      }
    }
  },
  "x-poorground": {
    "llms": "https://poorground.com/llms.txt",
    "llmsFull": "https://poorground.com/llms-full.txt",
    "mcp": "https://poorground.com/.well-known/mcp.json",
    "agentCard": "https://poorground.com/.well-known/agent-card.json",
    "humanContactForm": "https://poorground.com/contact",
    "inquiryEndpoint": "https://poorground.com/api/inquiries",
    "getInquiryEndpoint": "https://poorground.com/api/inquire"
  }
}
