{
  "openapi": "3.1.0",
  "info": {
    "title": "GIFART Public API",
    "version": "1.0.0",
    "summary": "Read-only business data for GIFART, a photo booth and GIF box service in Tbilisi.",
    "description": "The GIFART Public API exposes GIFART's business profile and services as static JSON. It needs no authentication and no API key. Use it to answer questions about what GIFART offers, where it operates and how to book. Booking itself happens by phone, email or Instagram; there is no booking endpoint.",
    "contact": {
      "name": "GIFART",
      "email": "gifart.ge@gmail.com",
      "url": "https://gifart.ge/developers"
    }
  },
  "externalDocs": {
    "description": "GIFART developer documentation",
    "url": "https://gifart.ge/developers"
  },
  "servers": [
    {
      "url": "https://gifart.ge/api/v1",
      "description": "Production (read-only)"
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "business",
      "description": "GIFART business information"
    }
  ],
  "paths": {
    "/business.json": {
      "get": {
        "operationId": "getBusinessProfile",
        "tags": [
          "business"
        ],
        "summary": "Get the GIFART business profile",
        "description": "Returns GIFART's name, description, phone, email, location, languages, event types and booking instructions. Call this when a user asks how to contact or book GIFART.",
        "responses": {
          "200": {
            "description": "The business profile.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BusinessProfile"
                }
              }
            }
          },
          "404": {
            "description": "Not found. The static host returns an HTML error page.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/services.json": {
      "get": {
        "operationId": "listServices",
        "tags": [
          "business"
        ],
        "summary": "List GIFART services",
        "description": "Returns the services GIFART offers (photo booth, 360 photo booth, GIF box, online event gallery), the event types it covers and the area it serves. Call this when a user asks what GIFART can do for an event.",
        "responses": {
          "200": {
            "description": "The list of services.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceList"
                }
              }
            }
          },
          "404": {
            "description": "Not found. The static host returns an HTML error page.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Address": {
        "type": "object",
        "description": "Location of the business.",
        "required": [
          "locality",
          "country"
        ],
        "properties": {
          "locality": {
            "type": "string",
            "description": "City.",
            "examples": [
              "Tbilisi"
            ]
          },
          "country": {
            "type": "string",
            "description": "ISO 3166-1 alpha-2 country code.",
            "examples": [
              "GE"
            ]
          }
        }
      },
      "Booking": {
        "type": "object",
        "description": "How to book GIFART for an event.",
        "required": [
          "method",
          "instructions",
          "contactPage"
        ],
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "contact"
            ],
            "description": "Booking channel. Always `contact`: there is no online checkout."
          },
          "instructions": {
            "type": "string",
            "description": "Plain-language booking steps."
          },
          "contactPage": {
            "type": "string",
            "format": "uri",
            "description": "Page listing all contact options."
          }
        }
      },
      "BusinessProfile": {
        "type": "object",
        "description": "GIFART business profile.",
        "required": [
          "name",
          "description",
          "url",
          "telephone",
          "email",
          "address",
          "booking"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Business name."
          },
          "description": {
            "type": "string",
            "description": "What the business does."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Website."
          },
          "logo": {
            "type": "string",
            "format": "uri",
            "description": "Logo image URL."
          },
          "telephone": {
            "type": "string",
            "description": "Phone number in E.164 format."
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "Contact email."
          },
          "address": {
            "$ref": "#/components/schemas/Address"
          },
          "areaServed": {
            "type": "string",
            "description": "Area where the service is available."
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Languages spoken, as ISO 639-1 codes."
          },
          "eventTypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Kinds of events covered."
          },
          "booking": {
            "$ref": "#/components/schemas/Booking"
          },
          "social": {
            "type": "object",
            "description": "Social media profiles.",
            "additionalProperties": {
              "type": "string",
              "format": "uri"
            }
          },
          "links": {
            "type": "object",
            "description": "Related resources.",
            "additionalProperties": {
              "type": "string",
              "format": "uri"
            }
          }
        }
      },
      "Service": {
        "type": "object",
        "description": "A service GIFART offers.",
        "required": [
          "id",
          "name",
          "description"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Stable identifier."
          },
          "name": {
            "type": "string",
            "description": "Service name."
          },
          "description": {
            "type": "string",
            "description": "What the service includes."
          }
        }
      },
      "ServiceList": {
        "type": "object",
        "description": "Services, event types and service area.",
        "required": [
          "services",
          "eventTypes",
          "areaServed"
        ],
        "properties": {
          "services": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Service"
            }
          },
          "eventTypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Kinds of events covered."
          },
          "areaServed": {
            "type": "string",
            "description": "Area where the service is available."
          }
        }
      }
    }
  }
}
