{
  "openapi": "3.1.0",
  "info": {
    "title": "Property Listings Backend Example OpenAPI Example",
    "version": "1.0.0",
    "description": "Illustrative OpenAPI contract for a Spala-style backend handoff. Not a live API and not generated runtime code."
  },
  "servers": [
    {
      "url": "https://example-project-api.spala.example",
      "description": "Placeholder API base URL. Replace with the published Spala project API base URL."
    }
  ],
  "tags": [
    {
      "name": "property-listings",
      "description": "A public example of the backend contract Spala can help create for real estate listings: properties, agents, saved listings, inquiries, auth, search filters, and API docs."
    }
  ],
  "paths": {
    "/api/properties": {
      "get": {
        "operationId": "get_properties",
        "summary": "GET /api/properties example route",
        "description": "Illustrative Spala backend contract route. Not a live API endpoint.",
        "parameters": [],
        "security": [],
        "responses": {
          "200": {
            "description": "Example successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Validation or request error."
          },
          "401": {
            "description": "Authentication required when the route is protected."
          },
          "403": {
            "description": "Authenticated user does not have access to this resource."
          },
          "404": {
            "description": "Resource not found."
          }
        }
      },
      "post": {
        "operationId": "post_properties",
        "summary": "POST /api/properties example route",
        "description": "Illustrative Spala backend contract route. Not a live API endpoint.",
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Example successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Validation or request error."
          },
          "401": {
            "description": "Authentication required when the route is protected."
          },
          "403": {
            "description": "Authenticated user does not have access to this resource."
          },
          "404": {
            "description": "Resource not found."
          }
        }
      }
    },
    "/api/properties/{id}": {
      "get": {
        "operationId": "get_properties_id",
        "summary": "GET /api/properties/{id} example route",
        "description": "Illustrative Spala backend contract route. Not a live API endpoint.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Example successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Validation or request error."
          },
          "401": {
            "description": "Authentication required when the route is protected."
          },
          "403": {
            "description": "Authenticated user does not have access to this resource."
          },
          "404": {
            "description": "Resource not found."
          }
        }
      },
      "put": {
        "operationId": "put_properties_id",
        "summary": "PUT /api/properties/{id} example route",
        "description": "Illustrative Spala backend contract route. Not a live API endpoint.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Example successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Validation or request error."
          },
          "401": {
            "description": "Authentication required when the route is protected."
          },
          "403": {
            "description": "Authenticated user does not have access to this resource."
          },
          "404": {
            "description": "Resource not found."
          }
        }
      }
    },
    "/api/inquiries": {
      "post": {
        "operationId": "post_inquiries",
        "summary": "POST /api/inquiries example route",
        "description": "Illustrative Spala backend contract route. Not a live API endpoint.",
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Example successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Validation or request error."
          },
          "401": {
            "description": "Authentication required when the route is protected."
          },
          "403": {
            "description": "Authenticated user does not have access to this resource."
          },
          "404": {
            "description": "Resource not found."
          }
        }
      }
    },
    "/api/saved-listings": {
      "post": {
        "operationId": "post_saved_listings",
        "summary": "POST /api/saved-listings example route",
        "description": "Illustrative Spala backend contract route. Not a live API endpoint.",
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Example successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Validation or request error."
          },
          "401": {
            "description": "Authentication required when the route is protected."
          },
          "403": {
            "description": "Authenticated user does not have access to this resource."
          },
          "404": {
            "description": "Resource not found."
          }
        }
      }
    },
    "/api/me/saved-listings": {
      "get": {
        "operationId": "get_me_saved_listings",
        "summary": "GET /api/me/saved-listings example route",
        "description": "Illustrative Spala backend contract route. Not a live API endpoint.",
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Example successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Validation or request error."
          },
          "401": {
            "description": "Authentication required when the route is protected."
          },
          "403": {
            "description": "Authenticated user does not have access to this resource."
          },
          "404": {
            "description": "Resource not found."
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  },
  "x-spala-example-boundary": "Illustrative public example only. Not a live customer API, not Spala source code, and not private platform architecture.",
  "x-spala-frontend-handoff": "Frontend receives filter fields, pagination shape, image metadata rules, auth routes, CORS origin, and generated docs."
}