{
  "openapi": "3.1.0",
  "info": {
    "title": "Fluefold",
    "version": "1",
    "description": "Send a roster or incomplete group account to request coordinated hood, duct and fan cleaning. Fluefold reconciles site history, access and documentation, seeks provider options and develops nonbinding terms by email. Keep private receipt credentials to inspect and continue a request."
  },
  "servers": [
    {
      "url": "https://fluefold.forevenza.com"
    }
  ],
  "paths": {
    "/_c/requests/{id}": {
      "get": {
        "operationId": "request_status",
        "summary": "Resume your recorded requirement and linked offers",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "t",
            "in": "query",
            "required": true,
            "description": "Private receipt/link token. Never publish it.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{48}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Current customer-visible state; payment links are not proof of payment"
          },
          "400": {
            "description": "Invalid input"
          },
          "404": {
            "description": "Unknown resource or invalid credentials"
          },
          "409": {
            "description": "State or terms conflict"
          }
        }
      }
    },
    "/_c/offers/{id}": {
      "get": {
        "operationId": "inspect_offer",
        "summary": "Authorized terms, order and processor payment state",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "t",
            "in": "query",
            "required": true,
            "description": "Private receipt/link token. Never publish it.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{48}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Current customer-visible state; payment links are not proof of payment"
          },
          "400": {
            "description": "Invalid input"
          },
          "404": {
            "description": "Unknown resource or invalid credentials"
          },
          "409": {
            "description": "State or terms conflict"
          }
        }
      }
    },
    "/_c/offers/{id}/accept": {
      "post": {
        "operationId": "accept_offer",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "t",
            "in": "query",
            "required": true,
            "description": "Private receipt/link token. Never publish it.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{48}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "terms_sha256",
                  "accept",
                  "name"
                ],
                "properties": {
                  "terms_sha256": {
                    "type": "string",
                    "pattern": "^[0-9a-f]{64}$",
                    "description": "Exact terms_sha256 returned by inspect_offer"
                  },
                  "accept": {
                    "const": true
                  },
                  "name": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 120
                  },
                  "organization": {
                    "type": "string",
                    "maxLength": 160
                  },
                  "purchase_order": {
                    "type": "string",
                    "maxLength": 80
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Current customer-visible state; payment links are not proof of payment"
          },
          "400": {
            "description": "Invalid input"
          },
          "404": {
            "description": "Unknown resource or invalid credentials"
          },
          "409": {
            "description": "State or terms conflict"
          }
        }
      }
    },
    "/_c/offers/{id}/decline": {
      "post": {
        "operationId": "decline_offer",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "t",
            "in": "query",
            "required": true,
            "description": "Private receipt/link token. Never publish it.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{48}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "terms_sha256"
                ],
                "properties": {
                  "terms_sha256": {
                    "type": "string",
                    "pattern": "^[0-9a-f]{64}$",
                    "description": "Exact terms_sha256 returned by inspect_offer"
                  },
                  "reason": {
                    "type": "string",
                    "maxLength": 500
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Current customer-visible state; payment links are not proof of payment"
          },
          "400": {
            "description": "Invalid input"
          },
          "404": {
            "description": "Unknown resource or invalid credentials"
          },
          "409": {
            "description": "State or terms conflict"
          }
        }
      }
    },
    "/_c/offers/{id}/release": {
      "post": {
        "operationId": "release_payment",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "t",
            "in": "query",
            "required": true,
            "description": "Private receipt/link token. Never publish it.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{48}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "terms_sha256",
                  "payment",
                  "confirm"
                ],
                "properties": {
                  "terms_sha256": {
                    "type": "string",
                    "pattern": "^[0-9a-f]{64}$",
                    "description": "Exact terms_sha256 returned by inspect_offer"
                  },
                  "payment": {
                    "type": "string"
                  },
                  "confirm": {
                    "const": true
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 120
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Current customer-visible state; payment links are not proof of payment"
          },
          "400": {
            "description": "Invalid input"
          },
          "404": {
            "description": "Unknown resource or invalid credentials"
          },
          "409": {
            "description": "State or terms conflict"
          }
        }
      }
    },
    "/_c/request": {
      "post": {
        "operationId": "submit_request",
        "summary": "Send a requirement to Fluefold",
        "description": "A request is recorded with a reference number. Fluefold will reconcile the site requirements, seek suitable provider scope and window options, and develop comparable nonbinding terms by email to the address left. No visits are booked by this request; nothing is ordered or committed until the buyer agrees scope, timing and price. 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": {
                  "continuation": {
                    "type": "object",
                    "required": [
                      "id",
                      "token"
                    ],
                    "description": "Optional receipt credentials to continue an existing requirement with this business",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "token": {
                        "type": "string"
                      }
                    }
                  },
                  "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": {
                      "group_name": {
                        "type": "string",
                        "description": "Operator's group name, if supplied.",
                        "x-facet": "identifier"
                      },
                      "location_account": {
                        "type": "string",
                        "description": "Current location-specific equipment/connectivity, history, fuel, access, existing coverage, records actually held and instructions. Keep requested future reports/photos in documentation, not in existing evidence or equipment. Preserve full provider names and unknowns.",
                        "x-facet": "specification"
                      },
                      "prepared_approach": {
                        "type": "string",
                        "description": "Preliminary recommended route and ranked priorities, not confirmed service.",
                        "x-facet": "specification"
                      },
                      "documentation": {
                        "type": "string",
                        "description": "Requested reports, component-specific photos, deficiencies and report destination.",
                        "x-facet": "specification"
                      },
                      "open_questions": {
                        "type": "string",
                        "description": "Consequential unresolved facts and named next owners.",
                        "x-facet": "specification"
                      },
                      "original_account": {
                        "type": "string",
                        "description": "Original wording, retained as source history rather than overriding current corrections.",
                        "x-facet": "specification"
                      },
                      "revision_history": {
                        "type": "string",
                        "description": "Earlier facts and corrections, subordinate to current location account.",
                        "x-facet": "specification"
                      },
                      "preferred_start": {
                        "type": "string",
                        "format": "date",
                        "description": "Optional exact requested start date as YYYY-MM-DD. Month-only preferences remain in timing.text. Invalid date words are recorded as sent and also listed missing, not dated.",
                        "x-facet": "timing"
                      }
                    },
                    "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"
          }
        }
      }
    }
  }
}