{
  "openapi": "3.1.0",
  "info": {
    "title": "Firstmise",
    "version": "1",
    "description": "Owners can describe an incomplete opening requirement, review a preliminary scope and record a request. Firstmise reviews existing arrangements and replies by email with a proposed schedule and nonbinding estimate. A receipt is not a booking."
  },
  "servers": [
    {
      "url": "https://firstmise.forevenza.com"
    }
  ],
  "paths": {
    "/_c/request": {
      "post": {
        "operationId": "submit_request",
        "summary": "Send a requirement to Firstmise",
        "description": "Your request is recorded with a reference number. Firstmise reviews your reported equipment, existing arrangements and remaining questions, then replies by email when you leave an address with a proposed schedule and nonbinding estimate through one contact. This request books no visits. Nothing is ordered or committed until you agree terms. Contact details are kept apart from the requirement, while we correspond or do business and for 24 months after, so a later request picks up where it left off; ask us to delete them at any time.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "need"
                ],
                "properties": {
                  "action": {
                    "type": "string",
                    "enum": [
                      "buy",
                      "source",
                      "quote",
                      "verify",
                      "lease",
                      "license",
                      "hire",
                      "retrieve",
                      "convert",
                      "other"
                    ],
                    "description": "What you want done"
                  },
                  "need": {
                    "type": "string",
                    "maxLength": 2000,
                    "description": "The requirement in your own words"
                  },
                  "specifications": {
                    "type": "object",
                    "properties": {
                      "site_address": {
                        "type": "string",
                        "description": "Kitchen site address, if known",
                        "x-facet": "geography",
                        "maxLength": 1000
                      },
                      "operation": {
                        "type": "string",
                        "description": "Restaurant, cafe, food truck commissary or other operation",
                        "x-facet": "specification",
                        "maxLength": 200
                      },
                      "inspection_target": {
                        "type": "string",
                        "description": "Inspection target exactly as stated, including uncertainty",
                        "x-facet": "timing",
                        "maxLength": 500
                      },
                      "opening_target": {
                        "type": "string",
                        "description": "Opening target or flexible window exactly as stated",
                        "x-facet": "timing",
                        "maxLength": 500
                      },
                      "inspection_date": {
                        "type": "string",
                        "format": "date",
                        "description": "Exact inspection date when known, YYYY-MM-DD; invalid date remains open",
                        "x-facet": "timing",
                        "maxLength": 100
                      },
                      "opening_date": {
                        "type": "string",
                        "format": "date",
                        "description": "Exact opening date when known, YYYY-MM-DD; invalid date remains open",
                        "x-facet": "timing",
                        "maxLength": 100
                      },
                      "situation": {
                        "type": "string",
                        "description": "Full buyer description, preserved with uncertainties and corrections",
                        "x-facet": "specification",
                        "maxLength": 10000
                      },
                      "grease_equipment": {
                        "type": "string",
                        "description": "Trap/interceptor presence: present, absent or unsure",
                        "x-facet": "specification"
                      },
                      "grease_route": {
                        "type": "string",
                        "description": "determine, new, arranged, reported or conditional",
                        "x-facet": "specification"
                      },
                      "grease_owner": {
                        "type": "string",
                        "description": "Reported grease arranger",
                        "x-facet": "specification"
                      },
                      "grease_details": {
                        "type": "string",
                        "description": "Equipment, history, manifest gaps and unconfirmed statements",
                        "x-facet": "specification"
                      },
                      "hood_equipment": {
                        "type": "string",
                        "description": "Exhaust hood presence: present, absent or unsure",
                        "x-facet": "specification"
                      },
                      "hood_route": {
                        "type": "string",
                        "description": "determine, new, arranged, reported or conditional",
                        "x-facet": "specification"
                      },
                      "hood_owner": {
                        "type": "string",
                        "description": "Reported hood arranger",
                        "x-facet": "specification"
                      },
                      "hood_details": {
                        "type": "string",
                        "description": "Hood scope, records and unresolved responsibilities",
                        "x-facet": "specification"
                      },
                      "backflow_request": {
                        "type": "string",
                        "description": "Overall testing need: determine or new, without assuming assembly types or overriding assembly coverage",
                        "x-facet": "specification"
                      },
                      "soda_equipment": {
                        "type": "string",
                        "description": "Soda backflow assembly presence: present, absent or unsure",
                        "x-facet": "specification"
                      },
                      "soda_route": {
                        "type": "string",
                        "description": "determine, new, arranged, reported or conditional",
                        "x-facet": "specification"
                      },
                      "soda_owner": {
                        "type": "string",
                        "description": "Reported soda assembly arranger",
                        "x-facet": "specification"
                      },
                      "soda_details": {
                        "type": "string",
                        "description": "Soda assembly and record details",
                        "x-facet": "specification"
                      },
                      "domestic_equipment": {
                        "type": "string",
                        "description": "Domestic assembly presence: present, absent or unsure",
                        "x-facet": "specification"
                      },
                      "domestic_route": {
                        "type": "string",
                        "description": "determine, new, arranged, reported or conditional",
                        "x-facet": "specification"
                      },
                      "domestic_owner": {
                        "type": "string",
                        "description": "Reported domestic assembly arranger",
                        "x-facet": "specification"
                      },
                      "domestic_details": {
                        "type": "string",
                        "description": "Domestic assembly and record details",
                        "x-facet": "specification"
                      },
                      "fire_equipment": {
                        "type": "string",
                        "description": "Fire-line assembly presence: present, absent or unsure",
                        "x-facet": "specification"
                      },
                      "fire_route": {
                        "type": "string",
                        "description": "determine, new, arranged, reported or conditional",
                        "x-facet": "specification"
                      },
                      "fire_owner": {
                        "type": "string",
                        "description": "Reported fire-line arranger, not blanket backflow coverage",
                        "x-facet": "specification"
                      },
                      "fire_details": {
                        "type": "string",
                        "description": "Fire-line assembly and record details",
                        "x-facet": "specification"
                      },
                      "prior_amounts": {
                        "type": "string",
                        "description": "Optional buyer-reported quotes/payments, service and source; unverified",
                        "x-facet": "budget",
                        "maxLength": 4000
                      },
                      "scope_summary": {
                        "type": "string",
                        "description": "Compact opening brief: retain existing coverage, verify dependencies, propose uncovered work; preliminary only",
                        "x-facet": "specification"
                      },
                      "preliminary_scope": {
                        "type": "string",
                        "description": "Reviewed recommended route by system, preliminary only",
                        "x-facet": "specification"
                      },
                      "unresolved_questions": {
                        "type": "string",
                        "description": "Open issues, contradictions and next-step owners",
                        "x-facet": "specification"
                      },
                      "next_action_owner": {
                        "type": "string",
                        "description": "Firstmise owns scope review and email proposal, no visits booked",
                        "x-facet": "specification"
                      },
                      "supersedes": {
                        "type": "string",
                        "description": "Previous authoritative request reference, if this is a changed request",
                        "x-facet": "identifier"
                      }
                    },
                    "description": "Details you already know. The business helps resolve missing specifications in the continuing engagement."
                  },
                  "quantity": {
                    "type": "object",
                    "properties": {
                      "amount": {
                        "type": "number"
                      },
                      "unit": {
                        "type": "string"
                      },
                      "per": {
                        "type": "string"
                      }
                    }
                  },
                  "timing": {
                    "type": "object",
                    "properties": {
                      "earliest": {
                        "type": "string"
                      },
                      "latest": {
                        "type": "string"
                      },
                      "recurrence": {
                        "type": "string"
                      },
                      "text": {
                        "type": "string"
                      }
                    }
                  },
                  "geography": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string"
                      },
                      "country": {
                        "type": "string"
                      },
                      "from": {
                        "type": "string"
                      },
                      "to": {
                        "type": "string"
                      }
                    }
                  },
                  "budget": {
                    "type": "object",
                    "properties": {
                      "amount": {
                        "type": "number"
                      },
                      "currency": {
                        "type": "string",
                        "description": "ISO 4217, default USD"
                      },
                      "per": {
                        "type": "string",
                        "description": "total, unit, month, year, load, ..."
                      }
                    }
                  },
                  "requested_fields": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 30,
                    "description": "Result fields you need"
                  },
                  "contact": {
                    "type": "object",
                    "description": "Optional; stored apart from the requirement, kept while we correspond or do business and for 24 months after, then deleted; you can ask us to delete it sooner",
                    "properties": {
                      "email": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "organization": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Recorded, with a reference number"
          },
          "400": {
            "description": "What to fix"
          }
        }
      }
    }
  }
}