{
  "openapi": "3.1.0",
  "info": {
    "title": "WOW Barcelona public API",
    "summary": "Read-only company, services, offices, and FAQ for agents.",
    "description": "Public, unauthenticated JSON API for WOW Barcelona. Use it to answer questions about the agency, list services, find offices, and read FAQ. Errors are RFC 9457 application/problem+json. There is no API key, OAuth, webhook, or write surface besides the existing contact form at POST /api/send-email.",
    "version": "1.0.0",
    "contact": {
      "name": "WOW Barcelona",
      "email": "hello@wow-barcelona.com",
      "url": "https://www.wow-barcelona.com/developers"
    },
    "license": {
      "name": "Use of this API",
      "url": "https://www.wow-barcelona.com/developers"
    }
  },
  "servers": [
    {
      "url": "https://www.wow-barcelona.com",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "Public",
      "description": "Unauthenticated read operations."
    },
    {
      "name": "Contact",
      "description": "Human contact form. Not for bulk automation."
    }
  ],
  "paths": {
    "/api/v1": {
      "get": {
        "operationId": "getApiIndex",
        "summary": "List public endpoints",
        "description": "Returns the public API index: documentation URLs, rate limit, and the operation list. Call this first if you do not have the OpenAPI file yet.",
        "tags": [
          "Public"
        ],
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "description": "application/json is the default. text/markdown returns a markdown sibling.",
            "schema": {
              "type": "string",
              "enum": [
                "application/json",
                "text/markdown"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List public endpoints",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiIndex"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "Unknown path or resource.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method is not supported on this path.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "406": {
            "description": "No representation matches the Accept header.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/company": {
      "get": {
        "operationId": "getCompany",
        "summary": "Get company profile",
        "description": "Returns WOW Barcelona identity: name, description, founding year, headquarters, languages, and partner badges.",
        "tags": [
          "Public"
        ],
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "description": "application/json is the default. text/markdown returns a markdown sibling.",
            "schema": {
              "type": "string",
              "enum": [
                "application/json",
                "text/markdown"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get company profile",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Company"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "Unknown path or resource.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method is not supported on this path.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "406": {
            "description": "No representation matches the Accept header.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/services": {
      "get": {
        "operationId": "listServices",
        "summary": "List services",
        "description": "Returns the e-retail services WOW sells: Amazon marketplace, Amazon Ads, TikTok Shop, AI.STUDIO, international expansion, and audits.",
        "tags": [
          "Public"
        ],
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "description": "application/json is the default. text/markdown returns a markdown sibling.",
            "schema": {
              "type": "string",
              "enum": [
                "application/json",
                "text/markdown"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List services",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceList"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "Unknown path or resource.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method is not supported on this path.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "406": {
            "description": "No representation matches the Accept header.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/offices": {
      "get": {
        "operationId": "listOffices",
        "summary": "List offices",
        "description": "Returns office cities, street addresses, and emails. Barcelona is headquarters.",
        "tags": [
          "Public"
        ],
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "description": "application/json is the default. text/markdown returns a markdown sibling.",
            "schema": {
              "type": "string",
              "enum": [
                "application/json",
                "text/markdown"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List offices",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfficeList"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "Unknown path or resource.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method is not supported on this path.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "406": {
            "description": "No representation matches the Accept header.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/faq": {
      "get": {
        "operationId": "listFaq",
        "summary": "List FAQ",
        "description": "Returns frequently asked questions about combining Amazon and TikTok Shop, partnership status, and who WOW works with.",
        "tags": [
          "Public"
        ],
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "description": "application/json is the default. text/markdown returns a markdown sibling.",
            "schema": {
              "type": "string",
              "enum": [
                "application/json",
                "text/markdown"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List FAQ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FaqList"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "Unknown path or resource.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method is not supported on this path.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "406": {
            "description": "No representation matches the Accept header.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/send-email": {
      "post": {
        "operationId": "sendContactEmail",
        "summary": "Submit the website contact form",
        "description": "Sends a form submission to the WOW inbox. This is the same endpoint the public website uses. Do not use it for bulk mail. Required fields depend on the form type: website contact (to+subject+storeUrl+email), careers (to+subject+name+email+linkedin+message), or WOW Analyser (source=wow-analyser+storeUrl+email, with optional focus and phone).",
        "tags": [
          "Contact"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactForm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Message accepted.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContactFormResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "Unknown path or resource.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "405": {
            "description": "HTTP method is not supported on this path.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "406": {
            "description": "No representation matches the Accept header.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "500": {
            "description": "Mail transport failed.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Problem": {
        "type": "object",
        "required": [
          "type",
          "title",
          "status",
          "detail",
          "code",
          "hint"
        ],
        "properties": {
          "type": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "hint": {
            "type": "string",
            "description": "What to do next. Usually a pointer at /openapi.json or /developers."
          }
        }
      },
      "ApiIndex": {
        "type": "object",
        "required": [
          "name",
          "documentation",
          "openapi",
          "endpoints"
        ],
        "properties": {
          "name": {
            "type": "string",
            "examples": [
              "WOW Barcelona"
            ]
          },
          "description": {
            "type": "string"
          },
          "documentation": {
            "type": "string",
            "format": "uri"
          },
          "openapi": {
            "type": "string",
            "format": "uri"
          },
          "catalog": {
            "type": "string",
            "format": "uri"
          },
          "mcp": {
            "type": "string",
            "format": "uri"
          },
          "rateLimit": {
            "type": "string"
          },
          "authentication": {
            "type": "string"
          },
          "endpoints": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "method",
                "path",
                "operationId"
              ],
              "properties": {
                "method": {
                  "type": "string"
                },
                "path": {
                  "type": "string"
                },
                "operationId": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "Company": {
        "type": "object",
        "required": [
          "name",
          "url",
          "email",
          "description",
          "headquarters"
        ],
        "properties": {
          "name": {
            "type": "string",
            "examples": [
              "WOW Barcelona"
            ]
          },
          "legalName": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "founded": {
            "type": "integer"
          },
          "description": {
            "type": "string"
          },
          "linkedin": {
            "type": "string",
            "format": "uri"
          },
          "headquarters": {
            "type": "object",
            "required": [
              "streetAddress",
              "addressLocality",
              "postalCode",
              "addressCountry"
            ],
            "properties": {
              "streetAddress": {
                "type": "string"
              },
              "addressLocality": {
                "type": "string"
              },
              "addressRegion": {
                "type": "string"
              },
              "postalCode": {
                "type": "string"
              },
              "addressCountry": {
                "type": "string"
              },
              "formatted": {
                "type": "string"
              }
            }
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "partners": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "Service": {
        "type": "object",
        "required": [
          "id",
          "name",
          "description"
        ],
        "properties": {
          "id": {
            "type": "string",
            "examples": [
              "amazon-marketplace"
            ]
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        }
      },
      "ServiceList": {
        "type": "object",
        "required": [
          "services"
        ],
        "properties": {
          "services": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Service"
            }
          }
        }
      },
      "Office": {
        "type": "object",
        "required": [
          "id",
          "city",
          "country",
          "address",
          "email"
        ],
        "properties": {
          "id": {
            "type": "string",
            "examples": [
              "barcelona"
            ]
          },
          "city": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "address": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "website": {
            "type": "string",
            "format": "uri"
          },
          "isHeadquarters": {
            "type": "boolean"
          }
        }
      },
      "OfficeList": {
        "type": "object",
        "required": [
          "offices"
        ],
        "properties": {
          "offices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Office"
            }
          }
        }
      },
      "FaqItem": {
        "type": "object",
        "required": [
          "id",
          "question",
          "answer"
        ],
        "properties": {
          "id": {
            "type": "string",
            "examples": [
              "combine-amazon-tiktok"
            ]
          },
          "question": {
            "type": "string"
          },
          "answer": {
            "type": "string"
          }
        }
      },
      "FaqList": {
        "type": "object",
        "required": [
          "faq"
        ],
        "properties": {
          "faq": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FaqItem"
            }
          }
        }
      },
      "ContactForm": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "email",
              "to",
              "subject"
            ],
            "properties": {
              "email": {
                "type": "string",
                "format": "email"
              },
              "to": {
                "type": "string",
                "format": "email"
              },
              "subject": {
                "type": "string"
              },
              "storeUrl": {
                "type": "string",
                "description": "Amazon or TikTok store URL. Website contact form."
              },
              "name": {
                "type": "string",
                "description": "Applicant name. Career form."
              },
              "linkedin": {
                "type": "string",
                "format": "uri"
              },
              "message": {
                "type": "string"
              },
              "source": {
                "type": "string"
              },
              "subscription": {
                "type": "boolean"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "source",
              "email",
              "storeUrl"
            ],
            "properties": {
              "source": {
                "const": "wow-analyser"
              },
              "email": {
                "type": "string",
                "format": "email"
              },
              "storeUrl": {
                "type": "string",
                "description": "One or more URLs (store or product page)."
              },
              "focus": {
                "type": "string"
              },
              "phone": {
                "type": "string"
              }
            }
          }
        ]
      },
      "ContactFormResult": {
        "type": "object",
        "required": [
          "success"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          }
        }
      }
    }
  }
}